【问题标题】:How do I access a property of a ViewController by another class?如何通过另一个类访问 ViewController 的属性?
【发布时间】:2015-04-04 09:07:42
【问题描述】:

子类ViewController.m 代码:

@interface ViewController : NSViewController 
@property (assign) IBOutlet NSArrayController *objectArrayController;
@property (assign) IBOutlet NSTableView *objectTable;
@property (weak) IBOutlet NSImageCell *objectImageCell;
@end
  • ViewController.m 包含了相当标准的实现
  • 究竟如何从单独的类中访问这些属性?
  • 我是只包含'ViewController.m' 文件,还是在main.m 文件的某处声明setter/gettor 方法,我可以从项目中的任何文件访问该方法?

【问题讨论】:

    标签: objective-c properties scope


    【解决方案1】:

    您需要做两件事来访问另一个类的属性。

    1. 您需要确保也合成了这些属性。你没有展示它,但我假设你展示了它。

    2. 您需要在其他类中获取要访问的视图控制器的实例。

       ViewController *controller =  (ViewController*)self.window.rootViewController;
      

    此代码仅适用于您的根视图。

    【讨论】:

    • 哇……有人对反对票发疯了。不添加输入或任何东西是没用的。无论如何。我明白你们在说什么,我的问题是获取这个视图控制器的实例。 @Chase 没有这样的属性“rootViewController”
    • 大声笑不要担心反对票。我不让他们打扰我。有一个属性developer.apple.com/library/prerelease/ios/documentation/UIKit/…
    • 试试这个方案获取根视图控制器stackoverflow.com/questions/12418177/…
    • 您必须确保在 AppDelegate.m 中也分配了根视图
    • 好吧,没什么用。我到处看了看,没有任何东西可以设置 rootViewController 我不知道怎么做。我看到的一切都是 UIKit,而不是 NS。我通过使用 contentViewController 在我的其他类中获得了要识别的属性,但它们 NSTextFields 总是返回 null,尽管它们有值。
    【解决方案2】:

    您需要获取指向包含您要引用的属性的视图控制器的特定实例的指针。 (它不会分配/初始化 VC 的新副本并尝试访问那里的属性。)

    一旦有了指针就很简单了:

    SomeType* theCopiedData = theSourceVCPointer.thePropertyIWant;
    

    当然,获得该指针有时是一项挑战——在许多情况下,它实际上需要思考和计划。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-10-01
      • 2012-12-13
      • 2011-03-27
      • 2015-06-16
      • 2020-02-18
      • 1970-01-01
      • 1970-01-01
      • 2020-03-05
      相关资源
      最近更新 更多