Objective c IB NSController子类绑定
在Mac OS X中,有一个对象是Interface Builder中Objective c IB NSController子类绑定,objective-c,cocoa-bindings,Objective C,Cocoa Bindings,在Mac OS X中,有一个对象是Interface Builder中NSObject的子类,即我添加了一个NSObject实例,并将其类设置为JDMyClass(它本身就是NSController子类)。在IB中,我使用JDMyClass中的values属性从一些接口元素创建了一些绑定,例如绑定到values.anyProperty的文本视图 根据: 除上述步骤中描述的自定义对象外,其他自定义对象将接收一条init消息 这意味着我永远没有机会使用initWithCoder:,这就是绑定信息的来
NSObject
的子类,即我添加了一个NSObject
实例,并将其类设置为JDMyClass
(它本身就是NSController子类
)。在IB中,我使用JDMyClass
中的values属性从一些接口元素创建了一些绑定,例如绑定到values.anyProperty
的文本视图
根据:
除上述步骤中描述的自定义对象外,其他自定义对象将接收一条init
消息
这意味着我永远没有机会使用initWithCoder:
,这就是绑定信息的来源(我想)。(同一文档指出哪些对象确实接收initWithCoder:
而不是init
)
随后,同一文件指出:
- 绑定
- 在OSX中,Cocoa使用源对象的
方法来创建它与目标对象之间的连接bind:toObject:withKeyPath:options:
- 在OSX中,Cocoa使用源对象的
JDMyClass
中,而且断点从未命中,因此Mac OS X不会尝试从IB重新建立任何绑定
虽然我可以使我的JDMyClass
成为的子类,例如NSUserDefaultsController
,并将共享用户默认控制器IB实例设置到我的类中,但我并不真的想这样做。它可以工作,也就是说,我可以使用initWithCoder:
,调用super
,并设置我的所有绑定,但它似乎很有用胡闹
绑定不一定提前知道,因此我无法在代码中建立它们
那么,当从Nib加载自定义类时,当我事先不知道绑定是什么时,如何将Interface Builder中设置的绑定应用于自定义类?
谢谢!我必须使用IB,暂时不能。但最终的解决方案是在您的Nib中绑定一个
NSObjectController
对象。不过,我不确定您是否坚持将JDMyClass与Nib一起存档和未存档,而不是将自定义对象保存到其他地方。使用NSObjectController的子类是我的备份计划。你知道“沉没成本谬论”吗?这就是我现在的想法。我已经浪费了四天时间试图解决这个问题,而不是做“简单的”事情。将Nib用作并非真正控制器或视图的对象的存档可能并不容易。如果您使用绑定,您应该使用核心数据进行模型持久化…这是一件容易的事情。在您描述的Nib中,您可以使用一个对象控制器从核心数据模型中获取正确的实体。是的,这是一个轻描淡写。我想做的是从头开始构建一个真正的控制器,但IB似乎不想让我这么做,除非它已经从一个内置的真正控制器派生出来。