我遇到这个奇怪的问题,我有一个NSArrayController绑定到一个managedObjectContext并使用数组控制器来填充NSTableView。我可以创建一个对象并插入它,它将添加新对象并更新绑定到控制器而不是其他列的一个列!我知道字段正在设置并且绑定正常工作(可能),因为如果我关闭应用程序并重新启动应用程序,则所有内容都会正确填充。
我不确定我错过了什么!我该如何调试绑定?从我在这里找到的: https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CoreData/Articles/cdTroubleshooting.html#//apple_ref/doc/uid/TP40002320-SW6 它基本上只是表示可能是您的控制器或键值编码合规性。
以下是创建实体的代码:
NSManagedObjectContext* context = [[BugManager shared] managedObjectContext];
NSError* error;
Bug* newBug = [NSEntityDescription insertNewObjectForEntityForName:@"Bug" inManagedObjectContext:context];
[newBug setValuesForKeysWithDictionary:data];
[context save:&error];
我已经确认所有字段都已正确设置并保存。我还试图明确地设置值,看看它是否是一个关键值,观察问题无济于事。
这是正确更新的列:
以下是未正确更新的内容:
阵列控制器:
我可以重新排列表格列,它仍然只更新一个目标字段(之前更新的字段)。我只是想让表格正确更新所有列,但这比预期的要困难!
答案 0 :(得分:1)
经过几个小时的抨击我的头撞到墙上,我追查的问题不是如何设置绑定(因为它是正确的),而是实际上我的数据是如何创建的。在我用来填充对象的表单中,我有一个文本字段和一个文本视图。文本字段工作正常但文本视图不正常。当我切换到尝试两个文本字段时,它也起作用。或者,如果我对字符串文字进行了硬编码,则绑定会正确更新。我的修复是从文本视图中创建一个显式的NSString*
。如果你要求它的字符串,它会给我一个NSBigMutableString
由于某种原因设置核心数据字段时没有触发通知。
所以我这样做了:
NSString* description = [[NSString alloc] initWithString:[[[self descriptionField] textStorage] string]];
然后我将该字符串值用于我的实体,一切正常。