Core data NSOperationQueue和NSFetchedResultsController

Core data NSOperationQueue和NSFetchedResultsController,core-data,nsoperation,nsoperationqueue,Core Data,Nsoperation,Nsoperationqueue,我使用queue和resultscontroller的组合来更新和显示一些coredata对象 在我的uitableviewcontroller中,我每X秒调用主控制器对象中的一个方法 [NSTimer scheduledTimerWithTimeInterval:2 target:self selector:@selector(test:) userInfo:nil repeats:YES]; } - (void)test:(NSTimer*)theTimer {

我使用queue和resultscontroller的组合来更新和显示一些coredata对象

在我的uitableviewcontroller中,我每X秒调用主控制器对象中的一个方法

[NSTimer scheduledTimerWithTimeInterval:2 target:self selector:@selector(test:)            userInfo:nil repeats:YES];

}

- (void)test:(NSTimer*)theTimer {

[[MainController instance] updatePersons];

}
在此方法中,自定义NSOperation对象将添加到我的主Q

- (BOOL)updatePersons {

UpdatePersonsOperation* u = [[UpdatePersonsOperation alloc] init];
[u setQueuePriority:NSOperationQueuePriorityVeryHigh];

[operationQ u];

[u release];
操作本身会创建一个新的managedobjectcontext,并尝试从web下载一些xml,并尝试更新coredata数据库。。。(此代码有效!)

在主控制器中,我收到上下文更改消息,并使用mergeChangesFromContextDidSaveNotification合并和更新我的主对象上下文。所有resultscontroller都使用此主对象上下文

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(notificationManagedObjectContextDidSave:) name:
                                        NSManagedObjectContextDidSaveNotification object:nil];
实际上一切都正常,但当我在NSO操作中插入一个新对象时,需要4-6秒,直到UI更新并显示这个新对象。。。此外,用户界面块。。。不可能滚动或触发其他交互

当我不使用队列并将下载和更新对象的代码放入uitableviewcontroller类中的方法时,我使用

[NSThread detachNewThreadSelector:@selector(codeFromUpdatePersonsOperation) toTarget:self withObject:nil];
一切都很好,没有任何延迟或UI冻结

有人能给我解释一下这种行为吗


谢谢

另一个问题可能是更新UI需要在主线程上进行。我遇到了与你报告的相同的问题,最终发现如果你打电话

[target performSelectorOnMainThread:@selector(methodToUpdateUI:) withObject:dataFromRetrievalOperation waitUntilDone:NO];

这将导致UI在线程完成处理后立即更新。否则,它将等待大约5秒钟,然后UI动画才会出现。

另一个问题可能是需要在主线程上更新UI。我遇到了与你报告的相同的问题,最终发现如果你打电话

[target performSelectorOnMainThread:@selector(methodToUpdateUI:) withObject:dataFromRetrievalOperation waitUntilDone:NO];

这将导致UI在线程完成处理后立即更新。否则,它会等待大约5秒钟,然后UI动画才会出现。

经过长时间的研究,这是NSFetchedResultsController的一个问题!我的提示是,当您从web更新和加载复杂数据时,从不使用NSFetchedResultsController。为uitableview实现您自己的更新逻辑。经过长期研究,NSFetchedResultsController存在问题!我的提示是,当您从web更新和加载复杂数据时,从不使用NSFetchedResultsController。为uitableview实现您自己的更新逻辑。