首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UIManagedDocument未保存

UIManagedDocument未保存
EN

Stack Overflow用户
提问于 2011-12-03 13:34:16
回答 3查看 3.4K关注 0票数 7

我正在使用UIManagedDocument管理我的数据。我创建了模型并使用它,一切似乎都正常,但是我的更改并没有被写回SQLite存储。

UIManagedDocument的文档说自动保存应该负责将数据持久化到数据库中,但这似乎并没有发生。

代码语言:javascript
复制
    NSManagedObjectContext *moc = [doc managedObjectContext];
    NSError *error = nil;
    MyItem *itemToAdd = (MyItems *)[moc existingObjectWithID:(NSManagedObjectID *)itemsID error:&error];

这将获取我想要添加的对象(并成功)。

代码语言:javascript
复制
   [itemContainer addItemsObject:itemToAdd];
   [doc updateChangeCount:UIDocumentChangeDone];

这会将项添加到另一个对象的items集合中,然后告诉文档我已经完成了更改。

我希望在这之后不久就会看到核心数据存储中写入的更改,但在Instruments中,我看到它从未发生过。

items集合是一个NSOrderedSet,并且由于此项目上的注释:

Exception thrown in NSOrderedSet generated accessors

我向包含集合的对象添加了一个addItemsObject::

代码语言:javascript
复制
- (void)addItemsObject:(MyItem *)value 
{
    NSMutableOrderedSet* tempSet = [NSMutableOrderedSet orderedSetWithOrderedSet:self.items];
    [tempSet addObject:value];
    self.items = tempSet;
}

也许Core Data被告知items集合发生了变化,但我看不出是怎么回事。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-08-21 08:03:38

我找到我的问题了。事实证明,我试图添加的对象有一个错误--我遗漏了一个必需的属性--而且在没有覆盖handleError的情况下,没有任何迹象表明有问题。

这里有关于它的博客:http://blog.stevex.net/2011/12/uimanageddocument-autosave-troubleshooting/

票数 10
EN

Stack Overflow用户

发布于 2013-11-26 18:19:34

在从服务器获取数据的方法中,我首先创建实体,然后调用这两个方法立即保存对文档的更改:

代码语言:javascript
复制
[self.document updateChangeCount:UIDocumentChangeDone];
[self.document savePresentedItemChangesWithCompletionHandler:^(NSError *errorOrNil) {
            ...
        }];
票数 1
EN

Stack Overflow用户

发布于 2017-10-24 05:33:07

来自@stevex链接的Key take aways / summary:

确保调用UIManagedDocument的-updateChangeCount方法或触发用文档的undoManager注册的更改。否则,文档不会认为它需要保存任何内容。

此外,将一些关键方法子类化将允许您查看何时发生自动保存以及是否存在错误。

代码语言:javascript
复制
- (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);
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8365781

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档