核心数据 - 是否可以避免在主线程中保存managedObjectContext?

时间:2011-12-16 10:13:32

标签: objective-c cocoa core-data

我尝试为核心数据进行一些多线程同步。但万一,我必须在主线程中保存:

- (void)importerDidSave:(NSNotification *)saveNotification {
    NSLog(@"MERGE in destination controller");
    if ([NSThread isMainThread]) {
    AppDelegate *delegate = (AppDelegate *)[[NSApplication sharedApplication] delegate];

        [[delegate managedObjectContext] mergeChangesFromContextDidSaveNotification:saveNotification];
    } else {
        [self performSelectorOnMainThread:@selector(importerDidSave:) withObject:saveNotification waitUntilDone:NO];
    }
}

我有时会冻结主线程(在这种情况下我有旋转)。所有接口视图都连接到阵列控制器,后者连接到AppDelegate moc。 所以,关于设计的一些问题:

  1. 我可以避免冻结主界面并合并主线程外的托管对象上下文吗?
  2. 如果我将所有数组连接到另一个managedobjectcontext,可以避免
  3. 旋转?我是如何避免问题的,当创建的上下文没有内部更改时,会在创建此对象后合并?
  4. 任何帮助都会表示赞赏......

1 个答案:

答案 0 :(得分:0)

您将始终需要更新控制器绑定的上下文,因为这是UI内容,您需要在主线程上执行此操作。

我对你为什么按照你的方式进行编码感到有些困惑。这对我来说似乎更简单:

- (void)importerDidSave:(NSNotification *)saveNotification {

    NSLog(@"MERGE in destination controller");

    AppDelegate *delegate = (AppDelegate *)[[NSApplication sharedApplication] delegate];

    [[delegate managedObjectContext] performSelectorOnMainThread:@selector(mergeChangesFromContextDidSaveNotification:) withObject:saveNotification waitUntilDone:NO];

}

使用该代码是否可以提高性能?