0

所以这很糟糕。尝试使用来自 NSDictionaries 的信息填充核心数据数据库。

我使用下面的代码打开一个 UIManaged 文档,完成处理程序块然后调用一个方法,该方法从 API 递归填充字典并为每个数据库添加一个实体。

数据库文件创建得很好,字典填充得很好,实体对象也被填充了,但是由于某种原因,信息没有写入数据库,虽然它有时会起作用,但我不确定是否有任何东西不同的。

我在控制台中收到一条消息,上面写着:

“NSFileCoordinator:发出令人惊讶的服务器错误信号。详细信息:连接无效”

每当方法 openWithCompletionHandler 或 saveToURL:forSaveOperation:withCompletionHandler 运行时。

我不明白为什么下面的代码不起作用,因为它是从斯坦福 iphone 课程中剪切和粘贴的。

我试过从模拟器中删除应用程序,但没有区别。这已经让我头疼了好几个小时,感谢任何帮助,谢谢。

+ (void)populateDatabase
{
// Get URL -> "<Documents Directory>/<TrailerDB>" 
NSURL *url = [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject];

url = [url URLByAppendingPathComponent:@"TrailerDB"];

UIManagedDocument *doc = [[UIManagedDocument alloc] initWithFileURL:url];

// If document exists on disk...

if (![[NSFileManager defaultManager] fileExistsAtPath:[url path]]) 
{
    [doc saveToURL:url 
  forSaveOperation:UIDocumentSaveForCreating
 completionHandler:^(BOOL success)
     { 

         if (success) [self fillDatabase:doc.managedObjectContext];

         if (!success) NSLog(@"couldn’t open document at %@", url);
     }];

} else {   

    if (doc.documentState == UIDocumentStateClosed) {
        // exists on disk, but we need to open it
        [doc openWithCompletionHandler:^(BOOL success) 
         {

             if (success) [self fillDatabase:doc.managedObjectContext];

             if (!success) NSLog(@"couldn’t open document at %@", url);
         }];
    } else if (doc.documentState == UIDocumentStateNormal) 
    {
        [self fillDatabase:doc.managedObjectContext];
    }
}
}
4

1 回答 1

3

在fillDatabase之后,尝试调用这个方法:

[doc saveToURL:doc.fileURL forSaveOperation:UIDocumentSaveForOverwriting completionHandler:^(BOOL success)
 {
    if (success == NO)
    {
       NSLog(@"Save operation failed!");
    }
 }];
于 2012-02-16T06:14:29.190 回答