所以这很糟糕。尝试使用来自 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];
}
}
}