我正在使用 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/

10-08 16:59