我有两个窗口,一个是显示内容的表视图。一个是用于输入内容的窗口。
我有一个NSTextField绑定到我的应用程序委托中的一个属性。当我更改文本字段中的值时,应用程序委派属性将更改。但是,如果我走另一条路,以编程方式更改属性的绑定键,则文本字段的值不会更新。但是,它在表视图中是这样做的。
这里出了什么问题?如何更新文本字段?
编辑:
我尝试了所有三种,结果都是相同的
[_addEntry setValue:@"Chet" forKey:@"payee"];
[_addEntry setPayee:@"chet"];
_addEntry.payee = @"chet";
编辑:
这里有一个简单的例子来阐述我的观点
https://dl.dropboxusercontent.com/u/48014761/test.zip
标签和文本字段被绑定到"str"属性。它最初为null。按log在控制台中查看。按changestr按钮可以更改字符串。记录以进行验证。请注意,标签和文本字段不会更新!
编辑:
"我想完成什么?">
以下是我正在合作的项目:
https://dl.dropboxusercontent.com/u/48014761/Write-Offs.zip
我正在尽可能多地使用Cocoa绑定。我有一张表,里面有一堆数据。然而,每个条目都会有一个与之相关的图像数组。因此,当我添加一个新条目时,我需要打开一个新窗口,这样我就可以设置该条目的属性(而不是通过表格),并上传一些图像。
我不确定我是否正确地实现了addEntryWindow。每次打开和关闭窗口时,我似乎都应该创建和销毁它。但这似乎没有发生。
此外,[[self addEntry] setDate:[NSDate date]];
似乎并不能解决我的问题。
感谢
Chet
如何以编程方式更改字段?你在用KVO吗?字段是否在NSManagedObject
实例内部?
绑定通过KVO工作。Core Data禁用KVO的某些方面以供其内部使用,您可能会被其中一个绊倒。
用代码示例更新您的问题,让我们看看发生了什么。
更新
两个窗口不一定需要在同一个xib中,但它们确实需要与相同的实例进行对话。理想情况下,它们都应该与NSManagedObject
的同一实例对话,并因此与同一NSManagedObjectContext
对话。
每个窗户的主人是谁?
所有者是一样的吗?
如果没有,是否正在创建新的核心数据堆栈?
更新
在你的测试中,我能够通过你如何编辑属性来纠正它
- (IBAction)press:(id)sender {
[self setStr:@"this"];
}
您直接访问iVar而不是属性。当您直接访问iVar时,KVO不会启动。
此外,在xib文件中,您正在访问self.str
,这是不必要的。它应该只是str
。
您在实际项目中是否直接访问物业?
更新
您可以先执行get访问器,然后执行set访问器:
[[self addEntry] setPayee:xxx];
根据你正在使用的变量,我想知道你试图实现什么。你能公布你试图实施的程序变更的确切代码吗?