当我打开NSManagedDocument(核心数据)文件时,它似乎总是空的

时间:2012-03-10 12:31:45

标签: ios core-data

核心数据中有一些我不理解的东西。 我创建了一个NSManagedDocument,进行了更改并保存了它。 然后我创建了另一个并打开了我保存的文件。 根据我的理解,NSManagedDocument应该让我发疯,但事实并非如此。

这是我写的代码:

NSURL *url = [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject];
url = [url URLByAppendingPathComponent:@"Data Base"];
// url is now "<Documents Directory>/Default Photo Database"
self.dataBase = [[UIManagedDocument alloc] initWithFileURL:url];

if (self.dataBase.documentState == UIDocumentStateClosed) {
    [self.dataBase openWithCompletionHandler:^(BOOL success) {
    }];
} 
Position *pos = [NSEntityDescription insertNewObjectForEntityForName:@"Position" inManagedObjectContext:self.dataBase.managedObjectContext];
pos.name = @"positon 1";


[self.dataBase saveToURL:self.dataBase.fileURL forSaveOperation:UIDocumentSaveForOverwriting completionHandler:^(BOOL success){

}];

self.dataBase = [[UIManagedDocument alloc] initWithFileURL:url];

if (self.dataBase.documentState == UIDocumentStateClosed) {
    [self.dataBase openWithCompletionHandler:^(BOOL success) {
    }];
} 
pos = [NSEntityDescription insertNewObjectForEntityForName:@"Position" inManagedObjectContext:self.dataBase.managedObjectContext];
pos.name = @"position 2";

据我所知,到目前为止,实体“位置”应该有2个对象,但我只有最后一个,为什么会这样?

我在这里错过了什么?

2 个答案:

答案 0 :(得分:0)

我不知道为什么,但是一旦我将代码移到AppDelegate就解决了......

答案 1 :(得分:0)

我知道这是一个老线程,但我想我无论如何都会回答它... 打开数据库是异步调用。您需要将插入数据库的代码移动到完成处理程序的成功块中,否则这将无效。您编写它的方式是尝试在实际打开数据库之前插入位置。

if (self.dataBase.documentState == UIDocumentStateClosed) {
    [self.dataBase openWithCompletionHandler:^(BOOL success) {
        Position *pos = [NSEntityDescription insertNewObjectForEntityForName:@"Position" inManagedObjectContext:self.dataBase.managedObjectContext];
        pos.name = @"positon 1";
    }];
}