Objective c 在Interface Builder中,如何通过另一个类绑定到类的属性?

Objective c 在Interface Builder中,如何通过另一个类绑定到类的属性?,objective-c,interface-builder,cocoa-bindings,cocoa-design-patterns,Objective C,Interface Builder,Cocoa Bindings,Cocoa Design Patterns,Objective-C中的OSX桌面ap 我认为这是一个基本问题,但即使花了大量时间研究KVO指南和各种相关问题,我也无法完全理解在这种情况下发生了什么(或者,这只是一个糟糕的形式,我应该停止) 创建一个自定义类,我们将其称为“OtherClass”,并为其指定一个属性: @interface OtherClass : NSObject{} @property NSString* aString; 在ViewController中,创建此自定义类的实例 oc = [[OtherClass a

Objective-C中的OSX桌面ap

我认为这是一个基本问题,但即使花了大量时间研究KVO指南和各种相关问题,我也无法完全理解在这种情况下发生了什么(或者,这只是一个糟糕的形式,我应该停止)

  • 创建一个自定义类,我们将其称为“OtherClass”,并为其指定一个属性:

    @interface OtherClass : NSObject{}
    @property NSString* aString;
    
  • 在ViewController中,创建此自定义类的实例

    oc = [[OtherClass alloc] init];
    
  • 在与ViewController类关联的界面生成器中,绑定如下字段:

  • 我希望发生的是,每当调用[oc setAString:@“SomeValue”]之类的内容时,UI都会更新,但当值更改时,文本字段不会更新

    值得一提的是,实际的用例是一个singleton类,它是一个外部硬件的管理器。我希望能够让程序的其他部分(例如,在硬件代码中)在硬件状态更改时更新状态字符串。如果我能将一个UI字段绑定到“viewController.hardwareMgr.status”上,然后调用“[hardwareMgr setStatus:@“allGood”]”,然后在任何我喜欢的地方调用它,那就太好了

    我从概念上理解问题在于nib没有收到更新通知,但我不确定解决这个问题的最佳方法。例如,我当然可以在viewController上手动注册一个侦听器,并可以使用它来“代理”viewController上的本地属性的更新,但这看起来很尴尬。由于我的manager类是一个单例类,所以我也可以在IB中创建另一个“实例”并绑定到它,但由于不同的原因,这看起来很尴尬,不适用于非单例情况


    如何实现这一点,或者这种模式仅仅是一个坏主意?

    是否
    oc
    是viewController的属性?在任何情况下,在VC代码中初始化它的位置都很重要。因为它在VC中,所以它不存在程序启动,它只存在于VC存在时,并且已经使用了您插入oc alloc init行的任何方法。您可以在应用程序委托中创建oc实例,并通过应用程序绑定到
    delegate.oc
    。但是,如果它只是一个字符串,常见的OSX模式是使该字符串成为NSUserDefaults中的一个值,以绑定到共享用户默认值控制器。是的,oc是VC的一个属性。这个时间安排可能有道理,但我尝试通过应用程序委托来实现这一点,结果是一样的——我似乎无法让属性的属性正常工作。NSUserDefaults完全可以工作,但这真的是通常的方式吗?对于不想持久化的值来说,这似乎有点尴尬(无论如何,它主要还是依赖于单例,所以我可以这样做)hrm…如果它不能持久化,委托应该可以工作。您可能需要
    self.oc.astring
    作为图像中的关键路径。如果IB绑定未找到目标,您可以使用调试开关在日志中获取警告。您想做的应该可以。oc是如何定义的?xib中的ViewController是否与定义oc的ViewController相同?ViewController和OtherClass KVO兼容吗?@Willeke Ok谢谢,很高兴知道我没有完全偏离基准。是的,VC与xib中的VC相同。OC是一个ivar,但实际上只是OtherClass*OC=[[OtherClass alloc]init];实际上OC类本身是一个apple样板文件,只有一个由@property定义的属性(aString)。至于KVO合规性,可能不是吗?在这个例子中,除了添加道具,我什么也没做。我是基于苹果的文档,上面说“通常,如果你遵循标准的Cocoa编码和命名约定,你可以使用自动更改通知,而不必编写任何额外的代码”,但也许我应该这样做?