Cocoa Mac应用程序和NSTableView不使用NSArrayController和NSManagedObjectContext进行刷新

时间:2014-04-01 15:21:26

标签: refresh nstableview nsmanagedobjectcontext nsarraycontroller ticoredatasync

我正在开发一个新的Core Data应用程序,我创建了一个NSArrayController(实体模式)来进行绑定,它运行得很好但是当SQLite存储更改时(更改来自使用TICoreDataSync库的其他客户端)我强制执行tableView重新加载没有成功。代码如下:

NSError *saveError = nil;
    [self.managedObjectContext save:&saveError];
    if (saveError != nil) {
        NSLog(@"%s %@", __PRETTY_FUNCTION__, saveError);
    }
[arrayController fetch:nil];
[tableView reloadData];

如果我关闭应用程序并再次启动它,我可以在tableView中看到更改,但我希望它能自动刷新。提前谢谢。

2 个答案:

答案 0 :(得分:0)

在TICDS进行更改时,您是否在调用mergeChangesFromContextDidSaveNotification:来更新您的上下文?

您应该实现此委托方法:

-(void)documentSyncManager:(TICDSDocumentSyncManager *)aSyncManager 
    didMakeChangesToObjectsInBackgroundContextAndSaveWithNotification:(NSNotification *)aNotification

确保在相应的主题上调用mergeChangesFromContextDidSaveNotification:

另外值得一看我正在开发的名为Ensembles的同步框架。这些天TICDS没有得到很好的维护 - 我过去一直在研究它 - 而且Ensembles的使用起来相当容易。

答案 1 :(得分:0)

我在fetch之前添加了以下行,它可以工作:

[arrayController setManagedObjectContext:[[NSApp delegate] managedObjectContext]];

对我来说它很有用,但我不明白为什么每次开始提取时都需要设置它,在启动时设置managedObjectContext或者在应用程序启动时它不会显示值。