使用通知从后台线程更新UITableView(NSFetchedResultsControllerDelegate)

时间:2011-10-13 13:52:26

标签: iphone nsfetchedresultscontroller nsmanagedobjectcontext

我将UITableView设置为NSFetchedResultsControllerDelegate。 我有一个后台线程获取数据(在一个单独的managedObjectContext中)。 两个上下文共享同一个商店协调员。 从背景上下文中删除对象时(保存后),我收到以下错误:

  

在调用-controllerDidChangeContent:期间,从NSFetchedResultsController的委托中捕获到异常。 * - [NSMutableArray removeObjectAtIndex:]:索引0超出带有userInfo的空数组的边界(null)

我在后台线程上添加一个观察者,如下所示:

    [[NSNotificationCenter defaultCenter] addObserver:self 
     selector:@selector(didsave:) 
     name:NSManagedObjectContextDidSaveNotification 
     object:[self managedObjectContext]];

和我的didsave:实现如下:

 -(void)didsave:(NSNotification *)nofication {

    MyAppDelegate *myApp = (MyAppDelegate*)[[UIApplication sharedApplication] delegate];
    NSManagedObjectContext *mainContext = [myApp managedObjectContext]; 

    [mainContext performSelectorOnMainThread:@selector(mergeChangesFromContextDidSaveNotification:) withObject:nofication waitUntilDone:YES]; }

来自didChangeContent的UITableView控制器:

case NSFetchedResultsChangeDelete:
        [self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
        break;

我不能混合fetchControllerDelegate和另一个背景MOcontext,就像我想做的那样吗?

0 个答案:

没有答案