2011-12-16 77 views
0

我正在尝试为核心数据做一些多线程同步。但在情况下,当我必须做保存主线程:核心数据 - 是否有可能避免在主线程中保存managedObjectContext?

- (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?我如何避免问题,当创建的上下文没有内部变化时,它会在创建此对象后合并?

任何帮助将不胜感激...

回答

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]; 

} 

是否使用该代码可以改善性能?

+0

它是一个相同的代码;) – user170317 2011-12-16 21:24:11