对象未保存到核心数据库

时间:2014-01-03 23:11:17

标签: ios objective-c cocoa-touch core-data

我正在尝试使用以下代码将对象添加到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文件中)。

3 个答案:

答案 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

新环境的重点是什么?你想用这段代码解决什么问题?