【问题标题】:Cocoa Bindings not updating NSTextField value可可绑定不更新 NSTextField 值
【发布时间】:2014-01-13 09:24:13
【问题描述】:

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

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

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

编辑:

我尝试了所有这 3 个,结果相同

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

编辑:

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

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

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

编辑:

“我想要完成什么?”

这是我正在处理的项目:

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

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

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

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

谢谢

切特

【问题讨论】:

    标签: core-data cocoa-bindings


    【解决方案1】:

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

    绑定通过 KVO 工作。 Core Data 为自己的内部使用禁用了 KVO 的某些方面,您可能会遇到其中之一。

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

    更新

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

    每个窗口的所有者是谁?

    楼主是同一个吗?

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

    更新

    在您的测试中,我能够通过您编辑属性的方式来纠正它

    - (IBAction)press:(id)sender {
    
      [self setStr:@"this"];
    }
    

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

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

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

    更新

    你可以先做一个 get 访问器,然后再做一个 set 访问器:

    [[self addEntry] setPayee:xxx];
    

    根据您使用的变量,我想知道您要完成什么。您能否发布您尝试实施的程序化更改的确切代码?

    【讨论】:

    • 我编辑了...也许我做错了 - 两个窗口应该在同一个 xib 文件中吗?
    • 检查我的新编辑 - 另外,不确定如何确定每个窗口的“所有者”是谁......它们都在 MainMenu.xib 文件中
    • 它都指向同一个nsmanagedobjectcontext。当我在输入窗口中更改某些内容时,表格确实会更改...
    • 啊。好吧,我正在尝试设置该属性的属性。我不能完全做到 [self setAddEntry.payee: "chet"]...
    • 所以我想我只是搞砸了我是如何实现多个窗口的。我为第二个窗口创建了一个新的 .xib 和 NSWindowController。这解决了一切......
    猜你喜欢
    • 1970-01-01
    • 2016-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-23
    • 2019-04-24
    • 1970-01-01
    相关资源
    最近更新 更多