我有一个绑定到核心数据实体的NSArrayController - Channel。我有一个方法,在用户更改频道标题后更新实体:
NSManagedObjectContext *localContext = [NSManagedObjectContext MR_contextForCurrentThread];
NSString * savedTitle = [fieldEditor string];
self.mainWindowController.selectedChannel.channel_name = savedTitle;
[localContext MR_saveToPersistentStoreAndWait];
(我正在使用MagicalRecord,如果不清楚的话)
从各方面来看,这个保存工作 - 在进行更改时反映了该值,如果我使用Core Data Editor立即检查持久性存储,我可以看到更改已保存。
更改视图时出现问题 - 更改在主视图中进行,用户可以切换到详细视图。这行代码交换了主视图,标志着发生故障的地方:
[[self.chatsViewController.view animator] removeFromSuperview];
执行此行后,新保存的值消失。对entity属性的请求返回一个空字符串。
但这是奇怪的部分。如果我重新启动应用程序,新值仍然存在!它回来了,这一次它就在这里。另外,看着持久性商店,我从来没有看到价值随时消失。这表明我的阵列控制器正在以某种方式获取值。
我已经尝试在保存之后刷新阵列控制器以“锁定它”,就像它一样。但这似乎没有效果。
有人可以建议我采取哪些措施来追踪这个问题?我无法理解为什么删除视图会导致这种情况发生。
更新 正如我在下面的评论中所提到的,我尝试在我的实体子类中的 name 属性的setter上放置一个日志语句,当我更改名称时它产生了一个日志条目,但从未在之后。
我现在做了另一个实验:在视图切换之前和之后查看核心数据记录。
NSArray * channels = [Channel MR_findAll];
NSLog(@"Channel: %@", [[channels objectAtIndex:0] channel_name]);
[[self.chatsViewController.view animator] removeFromSuperview];
NSArray * channels2 = [Channel MR_findAll];
NSLog(@"Channel2: %@", [[channels2 objectAtIndex:0] channel_name]);
结果:
Channel: adfasd
Channel2:
我必须在这里遗漏一些东西。