我有两个窗口,一个是用于显示内容的表格视图。一个是输入内容的窗口。
我有一个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]];
似乎无法解决问题。
由于
切特
答案 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];
根据你使用的变量我想知道你想要完成什么。你能发布你想要制定的程序化改变的确切代码吗?