iOS NSFetchedResultsController使用后台上下文错误地更新

时间:2012-07-05 08:50:12

标签: ios background nsfetchedresultscontroller nsmanagedobjectcontext

我有一个连接到NSFetchedResultsController的表视图:

self.fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:request
                                                                        managedObjectContext:self.database.managedObjectContext
                                                                      sectionNameKeyPath:nil
                                                                               cacheName:nil];

我在背景上下文中创建实体,如下所示:

    NSManagedObjectContext *backgroundContext;
    backgroundContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType];
    backgroundContext.parentContext = document.managedObjectContext; 

    [backgroundContext performBlock:^{
        [MyAPI createEntitiesInContext:backgroundContext];

        NSError *error = nil;
        [backgroundContext save:&error];
        if (error) NSLog(@"error: %@",error.localizedDescription);

        [document.managedObjectContext performBlock:^{
            [document updateChangeCount:UIDocumentChangeDone];
            [document.managedObjectContext save:nil];
        }];

现在,每当我获得新数据(以及上面显示的插入/更新实体)时,我的NSFetchedResultsController就不能正常工作了。特别是,我总是更新一个实体(不创建新实体),但我的表视图显示了两个实体。一旦我重新启动应用程序,它就会正确显示。

如果我在self.database.managedObjectContext中执行实体的创建([MyAPI createEntities]),一切正常。

我做错了什么?我已经坚持了几个小时了。

0 个答案:

没有答案