0

すべてのレコードを取得して 1 つずつ削除して、すべてのデータをクリアしたい:

- (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) を持つ不変オブジェクトに送信される変更メソッド

誰が理由を教えてくれますか、または良い習慣を教えてくれますか? ありがとう!

4

1 に答える 1

0

フェッチされた結果コントローラーがどこかにあると思います。削除中にそのコントローラーdelegateをに設定します。nil私は通常、FRC全体をに設定しnil、大きなデータ変更後にデータ表示全体を更新します。

それが不可能な場合は、通知ハンドラーでこのケースを処理します。

if (!userInfo) return;
于 2013-01-16T10:56:35.737 に答える