gpt4 book ai didi

objective-c - Cocoa 与核心数据的绑定(bind)未更新所有列

转载 作者:行者123 更新时间:2023-12-03 16:43:02 25 4
gpt4 key购买 nike

我遇到了这个奇怪的问题,我有一个 NSArrayController 绑定(bind)到 ManagedObjectContext 并使用数组 Controller 来填充 NSTableView。我可以创建一个对象并插入它,它将添加新对象并更新绑定(bind)到 Controller 的列之一,但不会更新其他列!我知道字段正在设置并且绑定(bind)工作正常(也许),因为如果我关闭应用程序并重新启动应用程序,所有内容都会正确填充。

我不知道我错过了什么!如何调试绑定(bind)?从我在这里找到的: https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CoreData/Articles/cdTroubleshooting.html#//apple_ref/doc/uid/TP40002320-SW6它基本上只是说可能是您的 Controller 或关键值编码合规性。

这是创建实体的代码:

NSManagedObjectContext* context = [[BugManager shared] managedObjectContext];
NSError* error;
Bug* newBug = [NSEntityDescription insertNewObjectForEntityForName:@"Bug" inManagedObjectContext:context];
[newBug setValuesForKeysWithDictionary:data];
[context save:&error];

我已验证所有字段均已正确设置并保存。我还尝试显式设置值来查看是否是关键值观察问题,但无济于事。

这是正确更新的列:

enter image description here

这是未正确更新的:

enter image description here

和数组 Controller :

enter image description here

我可以重新排列表列,但它仍然只更新一个,即目标字段(之前更新的字段)。我只是希望表正确更新所有列,但这比预期更困难!

最佳答案

经过几个小时的努力,我发现问题不在于绑定(bind)是如何设置的(因为它是正确的),而实际上是我的数据是如何创建的。在我用来填充对象的表单中,我有一个文本字段和一个 TextView 。文本字段工作正常,但 TextView 工作不正常。当我转而尝试使用文本字段时,它也有效。或者,如果我对字符串文字进行硬编码,则绑定(bind)会正确更新。对我来说,解决方法是从 TextView 创建一个显式的 NSString* 。如果您询问它的字符串,它会因为某种原因给我返回一个 NSBigMutableString ,用它设置核心数据字段不会触发通知。

所以我这样做了:

NSString* description = [[NSString alloc] initWithString:[[[self descriptionField] textStorage] string]];

然后,我将该字符串值用于我的实体,一切都会按预期工作。

关于objective-c - Cocoa 与核心数据的绑定(bind)未更新所有列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11919433/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com