1

在为 iPhone 开发应用程序时,我们偶然发现了持久化文本属性的问题。我们使用以下结构:

Datacore 模型:
报表有多个 Items
Item 具有属性“text”和“position”
Item 是 TextItem 和 TitleItem 的超类
它们都有更具体的属性(这些属性被正确保存)

模型:
我们有一个 TextItem 和 TitleItem 的超级项目,它们是从 DataCore 模型生成的。

ViewControllers:
ItemViewController 是 TitleItemViewController 和 TextItemViewController 的超级

视图:
TitleItemView 和 TextItemView 是 ItemView 的子类

我们使用以下代码来保存我们的 textItem(在 TextItemViewController 的 ViewWillDisappear 方法中):

[MagicalRecord saveUsingCurrentThreadContextWithBlock:^(NSManagedObjectContext *localContext) {
TextItem *ti = [self.textItem MR_inContext:localContext];
    NSString *newText = [self getText];
    ti.text = newText;
} completion:^(BOOL success, NSError *error) {
    if (!success) {
        NSLog(@"Could not save");
    }
}];

这不保存。尽管我们记录了对象并且文本属性确实发生了变化,但我们得到了没有变化的消息。奇怪的是文本保存在某个地方(即使消息说它不是)。我们可以使用该应用程序,它会保留正确的文本。只有当我们重新运行应用程序时,文本才会重置为默认值(我们使用一些默认文本创建 textItem,但是当它加载时,它会从加载的模型中读取文本)。

我们认为问题可能出在继承上,因为其他值保存正确,但 text 属性是用于我们所有 Item 类型对象的属性。

4

0 回答 0