Cocoa绑定不更新NSTextField值

时间:2014-01-13 09:24:14

标签: core-data cocoa-bindings

我有两个窗口,一个是用于显示内容的表格视图。一个是输入内容的窗口。

我有一个NSTextField绑定到我的app delegate中的属性。当我更改文本字段中的值时,app delegate属性将更改。但是,如果我采用另一种方式并以编程方式更改属性的绑定键,则文本字段的值不会更新。但是,它在表视图中。

这里出了什么问题?如何更新文本字段?

编辑:

我用相同的结果尝试了所有这三个

[_addEntry setValue:@"Chet" forKey:@"payee"];
[_addEntry setPayee:@"chet"];
_addEntry.payee = @"chet";

编辑:

这是一个简单的例子来阐述我的观点

https://dl.dropboxusercontent.com/u/48014761/test.zip

标签和文本字段绑定到“str”属性。它最初为null。按日志在控制台中查看。按更改str按钮更改字符串。记录验证。请注意,标签和文本字段不会更新!

编辑:

“我想要完成什么?”

这是我正在使用的项目:

https://dl.dropboxusercontent.com/u/48014761/Write-Offs.zip

我正在尝试尽可能多地使用Cocoa Bindings。我有一个包含大量数据的表。但是,每个条目都将有一个与之关联的图像数组。因此,当我添加一个新条目时,我需要打开一个新窗口,这样我就可以设置该条目的属性(而不是通过表格),同时上传一些图像。

我不确定我是否正确实现了addEntryWindow。看起来每次打开和关闭它时我都应该创建并销毁窗口。这似乎没有发生。

此外,[[self addEntry] setDate:[NSDate date]];似乎无法解决问题。

由于

切特

1 个答案:

答案 0 :(得分:1)

您是如何以编程方式更改字段的?你在用KVO吗?该字段是否在NSManagedObject实例内?

绑定通过KVO工作。核心数据禁用了KVO的某些方面以供其内部使用,您可能会绊倒其中一个。

使用代码示例更新您的问题,让我们看看发生了什么。

更新

两个窗口不一定需要在同一个xib中,但它们确实需要与相同的实例进行通信。理想情况下,他们都应该与NSManagedObject的同一个实例交谈,因此与同一个NSManagedObjectContext交谈。

每个窗口的拥有者是谁?

拥有者是否一样?

如果没有,是否正在创建新的Core Data堆栈?

更新

在您的测试中,我能够根据您编辑属性

的方式对其进行更正
- (IBAction)press:(id)sender {

  [self setStr:@"this"];
}

您是直接访问iVar而不是属性。当您直接访问iVar时,KVO不会触发。

此外,在您的xib文件中,您访问的是self.str,这是不必要的。它应该只是str

您是否在实际项目中进行任何直接属性访问?

更新

你可以做一个get访问器,然后是一个set accessor:

[[self addEntry] setPayee:xxx];

根据你使用的变量我想知道你想要完成什么。你能发布你想要制定的程序化改变的确切代码吗?