0

我使用NSFetchedResultsControllerDelegate在所有数据下载并插入到coreData后显示我的单元格。 我用下面的代码知道何时修改发生带didChangeObject的NSFetchedResultsController在tableview中显示单元格很慢

[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(refreshDatas:) name:NSManagedObjectContextDidSaveNotification object:nil]; 

然后,这种方法被称为

- (void)refreshDatas:(NSNotification *)notification 
{ 
    [[self.fetchedResultsController managedObjectContext] mergeChangesFromContextDidSaveNotification:notification]; 
} 

但是,我有一个问题,存在的第一个呼叫之间5至10秒代理NSFetchedResultsControllerDelegate的insertRowAtIndexPath和插入到UITableView中的单元格的显示,我不知道为什么。

感谢您的帮助

+0

您是否使用后台线程? –

回答

1

如果您使用的是后台线程,并通知在那里发射,你需要像主线程“重新发布”通知:

- (void)refreshDatas:(NSNotification*)notification 
{ 
    if ([notification object] == [self managedObjectContext]) return; 

    if (![NSThread isMainThread]) { 
     [self performSelectorOnMainThread:@selector(refreshDatas:) withObject:notification waitUntilDone:YES]; 
     return; 
    } 

    [[self managedObjectContext] mergeChangesFromContextDidSaveNotification:notification]; 
} 

如果它是不是问题,试着添加一些细节到你的问题。核心数据很困难,没有细节,很难理解正在发生的事情。

编辑

如果[notification object](在这种情况下上下文)是主要的一个你不合并更改。相反,如果该上下文来自不同的线程,则合并更改。这是出于性能原因,但您可以简单地将其删除。

希望有所帮助。

+0

Thx你非常非常,但我不明白你为什么这样做:if([notification object] == [self managedObjectContext])return; – marcL

+0

@marcL我添加了一个编辑。如果你愿意,也可以Upvote。该解决方案适合您吗? –

+0

是thx你:DD – marcL

相关问题