Cocoa绑定未更新NSTextField值



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

我有一个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];

根据你正在使用的变量,我想知道你试图实现什么。你能公布你试图实施的程序变更的确切代码吗?

最新更新