gpt4 book ai didi

cocoa - 为什么NSViewController不绑定(bind)representedObject?

转载 作者:行者123 更新时间:2023-12-03 17:39:26 24 4
gpt4 key购买 nike

简而言之:我将 NSTextField 绑定(bind)到文件所有者( View Controller )和 representedObject.firstName 的模型键路径,但编辑文本字段不会改变名字

这里有更多详细信息。我有一个简单的程序,除了创建一个 Thing 实例(一个具有一些属性的简单类)和 ThingViewController 之外,什么也不做。 Controller 有一个关联的 .xib 和一个简单的 UI - 几个文本字段,用于绑定(bind)到 Thing 的属性。

@interface Thing : NSObject
@property (nonatomic, strong) NSString *firstName;
@property (nonatomic, strong) NSString *lastName;
@property (nonatomic) BOOL someBool;
@end

在应用程序委托(delegate)中...

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
NSView *cv = self.window.contentView;
ThingViewController *vc = [[ThingViewController alloc]
initWithNibName:@"ThingViewController" bundle:nil];
theThing = [Thing new];
theThing.firstName = @"Rob";
vc.representedObject = theThing;
[cv addSubview:vc.view];
}

ThingViewController.xib 很简单:

enter image description here

这是第一个文本字段的绑定(bind):

enter image description here

当我运行时,文本字段确实显示“Rob”,因此它朝那个方向工作,但是当我编辑文本字段时,theThingfirstName属性> 不变。

我做错了什么?

编辑:以下是上述代码的压缩项目文件的链接:https://drive.google.com/file/d/0B2NHW8y0ZrBwWjNzbGszaDQzQ1U/edit?usp=sharing

最佳答案

除了 -applicationDidFinishLaunching: 中的局部变量之外,没有任何东西强烈引用您的 View Controller (ThingViewController)。一旦超出范围, View Controller 就会被释放并释放。 View 本身仍然存在,因为它是窗口 contentView 的 subview 。

一旦你的 View Controller 被释放/消失,文本字段就没有返回到 Thing 对象的连接,因此它实际上是调用 [nil setValue:@"New first name"forKeyPath:@"representedObject.firstName"]。

添加对 View Controller 的强引用(例如应用程序委托(delegate)的实例变量),然后重试。

@implementation AppDelegate {
Thing *theThing;
ThingViewController *vc;
}

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
NSView *cv = self.window.contentView;
vc = [[ThingViewController alloc] initWithNibName:@"ThingViewController" bundle:nil];
theThing = [Thing new];
theThing.firstName = @"Rob";
vc.representedObject = theThing;

[cv addSubview:vc.view];
}

关于cocoa - 为什么NSViewController不绑定(bind)representedObject?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22573176/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com