代码之家  ›  专栏  ›  技术社区  ›  utahwithak

具有核心数据的Cocoa绑定未更新所有列

  •  2
  • utahwithak  · 技术社区  · 12 年前

    我遇到了一个奇怪的问题,我有一个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];
    

    我已经验证了所有字段都设置正确并已保存。我还试图明确地设置值,看看这是否是一个关键的值观察问题,但无济于事。

    这是正在正确更新的列:

    enter image description here

    以下是未正确更新的:

    enter image description here

    以及阵列控制器:

    enter image description here

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

    1 回复  |  直到 4 年前
        1
  •  1
  •   utahwithak    12 年前

    经过数小时的努力,我发现问题不是绑定是如何设置的(因为它是正确的),而是我的数据是如何创建的。在我用来填充对象的表单中,我有一个文本字段和一个文本视图。文本字段工作正常,但文本视图不正常。当我切换到同时尝试文本字段时,效果也很好。或者,如果我硬编码了一个字符串文字,绑定会正确更新。我的解决方案是创建一个显式 NSString* 从文本视图。如果你要它的绳子,它会还给我一个 NSBigMutableString 出于某种原因,用这个设置核心数据字段并没有触发通知。

    所以我这样做了:

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

    然后,我将该字符串值用于我的实体,并且一切正常。