0

我最近一直在使用 Core Data 和 UIManagedDocument,并且有一些问题。

我有一个 UITableViewController,我在其中打开一个 UIManagedDocument。在这里,我将信息下载到 tableViewCotroller 并将信息保存到数据库并更新 tableview。现在,当我通过主页按钮进入主屏幕然后再次打开应用程序时,我想处理 appdelegate 中数据库中的数据。因此,在 appdelegate 中的适当方法中,我打开数据库,获取我想要的实体并更改我想要的对象的属性。现在,这行得通,我设法打开数据库并从数据库中获取我想要的对象。

当我完成从 appdelegate 中的数据库更改数据时,我的问题就出现了。因为在appdelegate方法完成后,我尝试从同一个数据库中重新获取tableview中的数据,但是此时数据库还没有注册在appdelegate中调用的方法中所做的更改。在 appdelegate 内部进行更改之后,我尝试调用 saveToURL 以覆盖 UIManagedDocument 上的方法,并且我还尝试了 managedobjectcontext 上的 save: 方法。保存更改以便更新数据库的正确方法是什么?

Ps:我是在iPad上写的,所以我没有设法上传代码,我稍后再上传。

谢谢

4

1 回答 1

0

这是正确的方法 - 在 NSManagedObjectContext 中进行更改然后保存。请记住,saveToURL 是异步的,因此最有可能的问题是在您在表视图中执行提取时您的保存尚未完成。这就是完成块的来源。所以也许你可以让完成块在你的表视图中设置一个属性,这会导致你的获取发生。就像是

// 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.
}
于 2013-02-13T15:09:56.633 回答