iOS: for循环更新NSMutableArray的对象
iOS: update object of NSMutableArray in for loop
我需要在 NSMutableArray 中更新/添加键 -> 值对。
如果尚未设置密钥,我想添加一个具有固定值的密钥。
我尝试了以下 - 但应用程序在 addObject
崩溃并出现 "mutating method sent to immutable object" 错误:
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];
//SAVING
NSMutableArray *bookmarksSaving = [NSMutableArray new];
[bookmarksSaving addObject:[[NSMutableDictionary alloc] initWithObjects:@[@"red"] forKeys:@[@"color"]]];
[bookmarksSaving addObject:[[NSMutableDictionary alloc] initWithObjects:@[@"yellow"] forKeys:@[@"color"]]];
[bookmarksSaving addObject:[[NSMutableDictionary alloc] initWithObjects:@[@"green",@"new"] forKeys:@[@"color",@"type"]]];
[defaults setObject:bookmarksSaving forKey:@"bookmarks"];
[[NSUserDefaults standardUserDefaults] synchronize];
//MODIFY
NSMutableArray *bookmarks = [defaults mutableArrayValueForKey:@"bookmarks"];
NSUInteger index = 0;
for (NSDictionary *bookmark in bookmarks) {
NSMutableDictionary *bookmarkMutable = [bookmark mutableCopy];
if ([bookmarkMutable objectForKey:@"type"] == nil)
{
[bookmarkMutable setValue:@"old" forKey:@"type"];
[bookmarks replaceObjectAtIndex:index withObject:bookmarkMutable];
}
index++;
}
[[NSUserDefaults standardUserDefaults] synchronize];
您必须将书签保存为 NSMutableDictionary
才能 add/remove keys/value
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSArray *bookmarks = [defaults objectForKey:@"bookmarks"];
NSMutableArray *newBookMarks = [bookmarks mutableCopy];
for (NSDictionary *bookmark in bookmarks) {
NSMutableDictionary *newBookmark = [bookmark mutableCopy];
if (![bookmark objectForKey:@"type"]){
[newBookmark setObject:@"old" forKey:@"type"];
}
[newBookMarks addObject:newBookmark];
}
[defaults setObject:newBookMarks forKey:@"bookmarks"];
[defaults 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"];
这应该很高效,因为它可以同时更新多个词典。
我需要在 NSMutableArray 中更新/添加键 -> 值对。
如果尚未设置密钥,我想添加一个具有固定值的密钥。
我尝试了以下 - 但应用程序在 addObject
崩溃并出现 "mutating method sent to immutable object" 错误:
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];
//SAVING
NSMutableArray *bookmarksSaving = [NSMutableArray new];
[bookmarksSaving addObject:[[NSMutableDictionary alloc] initWithObjects:@[@"red"] forKeys:@[@"color"]]];
[bookmarksSaving addObject:[[NSMutableDictionary alloc] initWithObjects:@[@"yellow"] forKeys:@[@"color"]]];
[bookmarksSaving addObject:[[NSMutableDictionary alloc] initWithObjects:@[@"green",@"new"] forKeys:@[@"color",@"type"]]];
[defaults setObject:bookmarksSaving forKey:@"bookmarks"];
[[NSUserDefaults standardUserDefaults] synchronize];
//MODIFY
NSMutableArray *bookmarks = [defaults mutableArrayValueForKey:@"bookmarks"];
NSUInteger index = 0;
for (NSDictionary *bookmark in bookmarks) {
NSMutableDictionary *bookmarkMutable = [bookmark mutableCopy];
if ([bookmarkMutable objectForKey:@"type"] == nil)
{
[bookmarkMutable setValue:@"old" forKey:@"type"];
[bookmarks replaceObjectAtIndex:index withObject:bookmarkMutable];
}
index++;
}
[[NSUserDefaults standardUserDefaults] synchronize];
您必须将书签保存为 NSMutableDictionary
才能 add/remove keys/value
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSArray *bookmarks = [defaults objectForKey:@"bookmarks"];
NSMutableArray *newBookMarks = [bookmarks mutableCopy];
for (NSDictionary *bookmark in bookmarks) {
NSMutableDictionary *newBookmark = [bookmark mutableCopy];
if (![bookmark objectForKey:@"type"]){
[newBookmark setObject:@"old" forKey:@"type"];
}
[newBookMarks addObject:newBookmark];
}
[defaults setObject:newBookMarks forKey:@"bookmarks"];
[defaults 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"];
这应该很高效,因为它可以同时更新多个词典。