我正在使用 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];
这会将项目添加到另一个对象中的项目集合,然后告诉文档我已完成更改。
我希望在此之后不久会看到写入核心数据存储的更改,但是在 Instruments 中观看时,我发现它从未发生过。
项目集合是一个 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 被告知项目集合已更改,也许出了点问题,但我不知道如何。
最佳答案
我发现了我的问题。原来我试图添加的对象有错误 - 我错过了一个必需的属性 - 并且没有覆盖 handleError 没有迹象表明存在问题。
在这里写了博客:
http://blog.stevex.net/2011/12/uimanageddocument-autosave-troubleshooting/