使用userInfo发送到不可变对象的变异方法(null)

时间:2013-01-16 07:14:45

标签: ios5 core-data

我希望通过获取所有记录来清除所有数据并逐个删除它们:

- (void) clear{
    for (Program *program in [self getAllProgram]){
        [managedObjectContext deleteObject:program];
    }        
    if (![managedObjectContext save:&error])
    {
        NSLog(@"Problem deleting program: %@", [error localizedDescription]);
    }
}

- (NSArray *)getAllProgram{
    NSFetchRequest *request = [[NSFetchRequest alloc] init];
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"Program"inManagedObjectContext:managedObjectContext];
    [request setEntity:entity];
    NSPredicate *predicate = [NSPredicate predicateWithFormat: @"freq = %@", self.freq];
    [request setPredicate:predicate];
    // Order the events by creation date, most recent first.
    NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"sid" ascending:YES];
    NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];
    [request setSortDescriptors:sortDescriptors];
    [sortDescriptor release];
    [sortDescriptors release];

    NSError *error = nil;
    return [[managedObjectContext executeFetchRequest:request error:&error] mutableCopy];

}

错误是

  

CoreData:错误:严重的应用程序错误。抓住了例外   在核心数据更改处理期间。这通常是一个bug   NSManagedObjectContextObjectsDidChangeNotification的观察者。    - [__ NSCFSet removeAllObjects]:用userInfo发送到不可变对象的变异方法(null)

谁能告诉我原因或告诉我一个好的做法?谢谢!

1 个答案:

答案 0 :(得分:0)

我想你在某个地方有一个获取的结果控制器。在删除期间将控制器的delegate设置为nil。我通常实际上将整个FRC设置为nil并在大数据更改后更新我的整个数据显示。

如果这不可行,请在通知处理程序中处理这种情况,例如

if (!userInfo) return;