gpt4 book ai didi

iphone - iPhone-解析NSMutableArray以删除对象

转载 作者:行者123 更新时间:2023-12-03 15:54:31 27 4
gpt4 key购买 nike

我有一个对UserDefaults起作用的对象。
它将用户数组中的内容添加到userdefaults中,然后在发生某些事件时将其删除。
该对象可以具有多个实例。

来自不同对象实例的那些调用似乎发生冲突并产生崩溃:

*** Terminating app due to uncaught exception 'NSGenericException', reason: '*** Collection <__NSCFArray: 0x66061e0> was mutated while being enumerated.<CFArray 0x66061e0 [0xe38400]>{type = mutable-small, count = 3, values = (

我这样删除我的物品:
// ==========================================================================================================
- (void) deleteSavedItem:(NSString*)keycodeToDelete
// ==========================================================================================================
{
NSMutableArray* savedItems = [[self loadAllSavedItems] mutableCopy];

for (NSDictionary* dict in savedItems) {
NSString* keycode = [dict objectForKey:@"keycode"];
if ([keycode isEqualToString:keycodeToDelete])
[savedItems removeObject:dict];
}

NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults];
[defaults setValue:savedItems forKey:@"savedItems"];
[defaults synchronize];

[savedItems release];
}

// ==========================================================================================================
- (NSArray*) loadAllSavedItems
// ==========================================================================================================
{
NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults];
NSArray* savedItems = [defaults arrayForKey:@"savedItems"];
if (savedItems == nil) savedItems = [NSArray array];
return savedItems;
}

如何在不发生冲突的情况下从该数组添加/删除内容?
我不确定原因是许多使用默认值的对象导致此崩溃。我也怀疑这是我解析数组的方式。

我需要保留我的对象实例,并使它们并行运行。

最佳答案

快速枚举数组时,切勿更改数组。它将为您造成异常。您可以使用来获得满足您条件的物品

NSArray * matchingItems = [savedItems filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@" keycode MATCHES[cd] %@ ", keycodeToDelete]];

然后使用删除它们,
[savedItems removeObjectsInArray:matchingItems];

修改后的 deleteSavedItem:将是。
- (void)deleteSavedItem:(NSString *)keycodeToDelete {
NSMutableArray * savedItems = [[self loadAllSavedItems] mutableCopy];
NSArray * matchingItems = [savedItems filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@" keycode MATCHES[cd] %@ ", keycodeToDelete]];

[savedItems removeObjectsInArray:matchingItems];

NSUserDefaults * defaults = [NSUserDefaults standardUserDefaults];
[defaults setValue:savedItems forKey:@"savedItems"];
[defaults synchronize];

[savedItems release];
}

关于iphone - iPhone-解析NSMutableArray以删除对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6477898/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com