NSArrayController实体属性神秘掉落

Aar*_*egh 7 cocoa core-data objective-c nsarraycontroller

我有一个绑定到核心数据实体的NSArrayController - Channel.我有一个方法,在用户更改频道标题后更新实体:

NSManagedObjectContext *localContext = [NSManagedObjectContext MR_contextForCurrentThread];
NSString * savedTitle = [fieldEditor string];
self.mainWindowController.selectedChannel.channel_name = savedTitle;
[localContext MR_saveToPersistentStoreAndWait];
Run Code Online (Sandbox Code Playgroud)

(我正在使用MagicalRecord,如果不清楚的话)

从各方面来看,这个保存工作 - 在进行更改时反映该值,如果我使用Core Data Editor立即检查持久性存储,我可以看到更改已保存.

更改视图时出现问题 - 更改在主视图中进行,用户可以切换到详细视图.这行代码交换了主视图,标记出现故障的位置:

[[self.chatsViewController.view animator] removeFromSuperview];
Run Code Online (Sandbox Code Playgroud)

执行此行后,新保存的值将消失.对entity属性的请求返回一个空字符串.

但这是奇怪的部分.如果我重新启动应用程序,新值仍然存在!它回来了,这一次它就在这里.另外,看着持久性商店,我从来没有看到价值随时消失.这表明我的阵列控制器正以某种方式获取值.

我已经尝试在保存之后刷新阵列控制器以"锁定它",就像它一样.但这似乎没有效果.

任何人都可以建议我采取哪些步骤来追踪这一点?我无法理解为什么删除视图会导致这种情况发生.

更新 正如我在下面的评论中所提到的,我尝试在我的实体子类中的name属性的setter 上放置一个日志语句,当我更改名称时它产生了一个日志条目,但从未发生过.

我现在做了另一个实验:在视图切换之前和之后查看Core Data记录.

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]);
Run Code Online (Sandbox Code Playgroud)

结果:

Channel: adfasd
Channel2:
Run Code Online (Sandbox Code Playgroud)

我必须在这里遗漏一些东西.