我正在使用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];这会将项添加到另一个对象的items集合中,然后告诉文档我已经完成了更改。
我希望在这之后不久就会看到核心数据存储中写入的更改,但在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被告知items集合发生了变化,但我看不出是怎么回事。
发布于 2012-08-21 08:03:38
我找到我的问题了。事实证明,我试图添加的对象有一个错误--我遗漏了一个必需的属性--而且在没有覆盖handleError的情况下,没有任何迹象表明有问题。
这里有关于它的博客:http://blog.stevex.net/2011/12/uimanageddocument-autosave-troubleshooting/
发布于 2013-11-26 18:19:34
在从服务器获取数据的方法中,我首先创建实体,然后调用这两个方法立即保存对文档的更改:
[self.document updateChangeCount:UIDocumentChangeDone];
[self.document savePresentedItemChangesWithCompletionHandler:^(NSError *errorOrNil) {
...
}];发布于 2017-10-24 05:33:07
来自@stevex链接的Key take aways / summary:
确保调用UIManagedDocument的-updateChangeCount方法或触发用文档的undoManager注册的更改。否则,文档不会认为它需要保存任何内容。
此外,将一些关键方法子类化将允许您查看何时发生自动保存以及是否存在错误。
- (id)contentsForType:(NSString *)typeName error:(NSError * _Nullable __autoreleasing *)outError {
id retVal = [super contentsForType:typeName error:outError];
NSLog(@"Autosaving document. contentsForType at fileURL %@ error %@", self.fileURL, *outError);
return retVal;
}
- (void)handleError:(NSError *)error userInteractionPermitted:(BOOL)userInteractionPermitted {
[super handleError:error userInteractionPermitted:userInteractionPermitted];
NSLog(@"ManagedDocument handleError: %@ %@", error.localizedDescription, error.userInfo);
}https://stackoverflow.com/questions/8365781
复制相似问题