iPhone-解析NSMutableArray以删除对象

|| 我有一个对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];
修改后的“ 4”将是。
- (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];
}
    
        您可以尝试同步处理NSUSerDefaults数组中的添加/删除     
        
        // ==========================================================================================================
    - (void) deleteSavedItem:(NSString*)keycodeToDelete
        // ==========================================================================================================
    {   
        NSMutableArray* savedItems = [self loadAllSavedItems];

        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];
    }

        // ==========================================================================================================
    - (NSMutableArray*) loadAllSavedItems 
        // ==========================================================================================================
    {
        NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults];
        NSMutableArray* savedItems = [defaults arrayForKey:@\"savedItems\"];
        if (savedItems == nil) savedItems = [[NSMutableArray alloc]init];
        return savedItems;
    }
    

要回复问题请先登录注册