iOS:在 for 循环中更新 NSMutableArray 的对象

标签 ios objective-c for-loop nsmutablearray

我需要更新/添加 NSMutableArray 中的键 -> 值对。

如果尚未设置 key ,我想添加一个具有固定值的 key 。

我尝试了以下操作 - 但应用程序在 addObject 处崩溃,并出现“发送到不可变对象(immutable对象)的变异方法”错误:

    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    NSMutableArray *bookmarks = [defaults mutableArrayValueForKey:@"bookmarks"];

    for (id bookmark in bookmarks) {

        if ([bookmark objectForKey:@"type"] == NULL){
            [bookmark addObject:@"old" forKey:@"type"];
        }
    }

    [[NSUserDefaults standardUserDefaults] synchronize];

最佳答案

您的外部数组包含不可变字典。一种选择如下:

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSMutableArray *bookmarks = [defaults mutableArrayValueForKey:@"bookmarks"];

[booksmarks enumerateObjectsWithOptions:NSEnumerationConcurrent usingBlock:^(NSDictionary *bookmark, NSUInteger index, BOOL *stop) {
    if (!bookmark[@"type"]) {
        NSMutableDictionary *mutable = [bookmark mutableCopy];
        mutable[@"type"] = @"old";
        [bookmarks replaceObjectAtIndex:index withObject:[mutable copy]];
    }
}];

// Update NSUserDefaults
[[NSUserDefaults standardUserDefaults] setObject:bookmarks forKey:@"bookmarks"];

这应该很高效,因为它可以同时更新多个词典。

关于iOS:在 for 循环中更新 NSMutableArray 的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32193597/

相关文章:

objective-c - 在 Cocoa/OSX 中读取用户默认值的最简单方法是什么?

c++ - 当您不知道整数范围是按升序还是降序排列时,如何迭代它?

ios - 将 UISearchBar 添加到嵌入到 NavigationController IOS6 中的 UICollectionviewController

ios - Collection View 单元格内按钮的填充宽度

ios - 从 Firebase 中提取值

javascript - 在vue js中使用v-for在div内创建组件

matlab - Octave: For-loop error 说 A(I) = X: X must have the same size as I

iphone - 从其 contentViewController 中关闭 UIPopoverController?

objective-c - 如何在 iPad 应用程序中添加电子邮件功能?

ios - 从核心数据中的实体获取多个字段