我有一个使用核心数据的iPhone/iPad应用程序。数据通过各种Web服务调用提供。 我使用轮询机制来确定每个服务调用彼此独立的时间,以便使信息保持最新。因此,很可能有多个后台线程使用多个MOC从这些呼叫处理数据。对于插入和更新,这种方法工作正常。 在试图实现删除功能时,我的程序崩溃。它似乎是由于一个线程中的上下文删除了另一个线程也正在处理的托管对象而导致的,因为删除的对象已发生故障。具有多个背景线程的核心数据
我一直在寻找解决方案,但并没有特别针对任何事情。 删除应该推到主线程的上下文中吗?为了完成所有的处理,在Singleton中维护单个线程和伴随的MOC如何?
任何帮助/指导将不胜感激。
在AppDelegate didFinishLaunchingWithOptions方法中: [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(changesSaved :) name:NSManagedObjectContextDidSaveNotification object:nil];
这就要求:
- (空)changesSaved:(NSNotification *)注意 { [自performSelectorOnMainThread:@selector(changesSavedOnMainThread :) withObject:注意waitUntilDone:YES]; }
最后,
- (空)changesSavedOnMainThread:(NSNotification *)注意 { \t如果([注对象]!= __managedObjectContext)[__managedObjectContext mergeChangesFromContextDidSaveNotification:note]; } – flizit 2012-03-02 20:57:20
对不起,上面的评论看起来很糟糕。无论如何,我背景这个处理理论上保持主线程尽可能自由。我完全可以调整以了解主线程与后台处理对性能的影响。 – flizit 2012-03-02 20:59:01