我正在使用UIManagedDocument来管理我的数据。我创建模型并使用它,一切似乎都在工作,但我的更改不会被写回SQLite存储。
UIManagedDocument的文档说自动保存应该将数据保存到数据库,但这似乎不会发生。
NSManagedObjectContext *moc = [doc managedObjectContext];
NSError *error = nil;
MyItem *itemToAdd = (MyItems *)[moc existingObjectWithID:(NSManagedObjectID *)itemsID error:&error];
这将获取我想要添加的对象(并成功)。
[itemContainer addItemsObject:itemToAdd];
[doc updateChangeCount:UIDocumentChangeDone];
这会将项添加到另一个对象的项集合中,然后告诉文档我已完成更改。
我希望在此之后不久有一段时间可以看到写入Core Data商店的更改,但是在Instruments中观看,我发现它永远不会发生。
items集合是一个NSOrderedSet,由于对该项目的评论:
Exception thrown in NSOrderedSet generated accessors
我已将addItemsObject:添加到包含该集合的对象:
- (void)addItemsObject:(MyItem *)value
{
NSMutableOrderedSet* tempSet = [NSMutableOrderedSet orderedSetWithOrderedSet:self.items];
[tempSet addObject:value];
self.items = tempSet;
}
也许出现问题,Core Data被告知物品集合已经改变,但我不知道如何。
答案 0 :(得分:9)
我发现了我的问题。原来我试图添加的对象有错误 - 我错过了必需的属性 - 并且没有覆盖handleError,没有迹象表明存在问题。
在这里发表博文: http://blog.stevex.net/2011/12/uimanageddocument-autosave-troubleshooting/
答案 1 :(得分:1)
在我从服务器获取数据的方法中,我首先创建实体,然后我调用这两种方法立即将更改保存到文档中:
[self.document updateChangeCount:UIDocumentChangeDone];
[self.document savePresentedItemChangesWithCompletionHandler:^(NSError *errorOrNil) {
...
}];
答案 2 :(得分:0)
来自@ stevex链接的关键收集/摘要:
确保调用UIManagedDocument的<runtime><assemblyBinding>...</assemblyBinding></runtime>
方法或触发向文档-updateChangeCount
注册的更改。否则文档不认为它需要保存任何东西。
此外,子类化一些关键方法将允许您查看何时发生自动保存以及是否存在错误。
undoManager