我正在尝试使用以下代码将对象添加到Core Data Database:
NSManagedObjectContext *managedObjectContext = [[NSManagedObjectContext alloc] init];
managedObjectContext.persistentStoreCoordinator = [[CoreDataController sharedCoreDataController] persistentStoreCoordinator];
Feed *feed = [NSEntityDescription insertNewObjectForEntityForName:@"Feed" inManagedObjectContext:managedObjectContext];
feed.feedID = dictionary[@"feed_id"];
feed.siteURL = dictionary[@"site_url"];
feed.title = dictionary[@"title"];
NSError *error;
if (![managedObjectContext save:&error]) {
NSLog(@"Error, couldn't save: %@", [error localizedDescription]);
}
Feed是NSManagedObject的子类。从sharedCoreDataController(单例)返回的persistentStoreCoordinator是来自UIManagedDocument的persistentStoreCoordinator(在应用程序启动时创建或打开)。据我所知,该文档正在成功创建或打开。我在模拟器中运行此代码,我正在查看我保存数据库的目录(apps文档目录),但是不会更新persistentStore文件以反映要添加的新对象。难道我做错了什么?我还应该指出,上述代码在并发异步队列上执行多次。
任何帮助都会非常感谢,提前谢谢。
更新:在Alexander和Duncan的建议之后,上面的代码已经更新以反映更改。然而,遗憾的是,我没有注意到任何差异(新数据没有出现在persistentStore文件中)。
答案 0 :(得分:1)
您是否致电该线路以保存managedObjectContext
?怎么样:
NSError *error;
if (![managedObjectContext save:&error]) {
NSLog(@"Error, couldn't save: %@", [error localizedDescription]);
}
答案 1 :(得分:0)
尝试使用类似的东西
NSManagedObjectContext *managedObjectContext = [[NSManagedObjectContext alloc] init];
managedObjectContext.persistentStoreCoordinator = [[CoreDataController sharedCoreDataController] persistentStoreCoordinator];
for (NSDictionary *dictionary in arrayOfData) {
Feed *feed = [NSEntityDescription insertNewObjectForEntityForName:@"Feed" inManagedObjectContext:managedObjectContext];
feed.feedID = dictionary[@"feed_id"];
feed.siteURL = dictionary[@"site_url"];
feed.title = dictionary[@"title"];
}
NSError *error;
if (![managedObjectContext save:&error]) {
NSLog(@"Error, couldn't save: %@", [error localizedDescription]);
}
我会避免为你插入的每个对象创建一个managedObjectContext。
答案 2 :(得分:0)
首先,不建议使用UIManagedDocument
。它不是您的单一应用程序范围的上下文。它适用于文档样式应用程序。
其次,从NSManagedObjectContext
公开的UIManagedDocument
并未附加NSPersistentStoreCoordinator
。它是私有NSManagedObjectContext
的子上下文,然后具有NSPersistentStoreCoordinator
。我怀疑如果你使用调试器,你可能会发现NSManagedObjectContext
遗漏了NSPersistentStoreCoordinator
。
无论如何,您使用UIManagedDocument
,然后尝试将另一个NSManagedObjectContext
附加到同一NSPersistentStoreCoordinator
。这是一个糟糕的设计,您应该至少删除UIManagedDocument
或停止创建新的NSManagedObjectContext
。
新环境的重点是什么?你想用这段代码解决什么问题?