我最近一直在使用Core Data和UIManagedDocument,并且有一些问题。
我有一个UITableViewController,我打开一个UIManagedDocument。在这里,我将信息下载到tableViewCotroller并将信息保存到数据库并更新tableview。现在当我通过主页按钮进入主屏幕然后再次打开应用程序时,我想在appdelegate中处理数据库中的数据。因此,在appdelegate中的相应方法中,我打开数据库,获取我想要的实体并更改我想要的对象中的属性。现在,这工作,我设法打开数据库并从数据库中获取我想要的对象。
当我在appdelegate中更改数据库中的数据时,我的问题就出现了。因为appdelegate方法完成后,我尝试从同一个数据库中重新获取tableview中的数据,但此时数据库尚未注册在appdelegate中调用的方法中所做的更改。我已经尝试在appdelegate内部进行更改之后立即调用saveToURL来覆盖UIManagedDocument上的方法,并且我还尝试了managedobjectcontext上的save:方法。 保存更改以正确更新数据库的正确方法是什么?
Ps:我在iPad上写这个,所以我设法上传代码,我稍后会上传。
谢谢
答案 0 :(得分:0)
这是正确的方法 - 在NSManagedObjectContext中进行更改然后保存。请记住saveToURL是异步的,因此最有可能的问题是,在表视图中执行提取时,保存尚未完成。这就是完成块的用武之地。所以也许你可以让你的表视图中的完成块设置一个属性,这会导致你的fetch发生。像
这样的东西// appdelegate
[self.mainDatabase saveToURL:self.mainDatabase.fileURL
forSaveOperation:UIDocumentSaveForOverwriting
completionHandler:^(BOOL success) {
if (success) {
myTableView.context = self.mainDatabase.managedObjectContext;
}
}];
// TableView
- (void)setContext:(NSManagedObjectContext *)newContext {
_context = newContext;
NSArray *fetchResults = [_context executeFetchRequest:someFetchRequest error:&error];
// update model etc.
}