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

Posted

技术标签:

【中文标题】使用 userInfo (null) 发送到不可变对象的变异方法【英文标题】:mutating method sent to immutable object with userInfo (null) 【发布时间】:2013-01-16 07:14:44 【问题描述】:

我想通过获取所有记录来清除所有数据并一一删除:

- (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:错误:严重的应用程序错误。异常被捕获 在核心数据更改处理期间。这通常是一个错误 NSManagedObjectContextObjectsDidChangeNotification 的观察者。 -[__NSCFSet removeAllObjects]: 使用 userInfo (null) 将变异方法发送到不可变对象

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

【问题讨论】:

【参考方案1】:

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

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

if (!userInfo) return;

【讨论】:

对不起,我没有使用 NSFetchedResultsController 您仍然可以按照指示在回调中处理它。

以上是关于使用 userInfo (null) 发送到不可变对象的变异方法的主要内容,如果未能解决你的问题,请参考以下文章

使用 NSMutableArray 将变异方法发送到不可变对象

发送到不可变对象的变异方法 - iOS [重复]

发送到不可变对象的变异方法

尽管对象是 NSMutableDictionary,但“发送到不可变对象的变异方法”

发送到不可变对象的变异方法

应用程序崩溃:发送到不可变对象的变异方法