ios - 尝试从另一个类访问时类中的对象为零

标签 ios objective-c class properties

我有一个包含按钮属性的 View Controller 类,我需要从不同的类( TableView Controller )更改其启用状态。我还调用了该 VC 类中的一个方法。我可以很好地调用该方法,但是当我尝试访问按钮属性时,它是零。实际上它的所有属性都是零。我一定是设置不太对。

//ViewController.h
@property (strong, nonatomic) IBOutlet UIButton *aButton;
- (IBAction)myButtonTapped;

//ViewController.m
//did not override setter or getter for aButton
- (IBAction)myButtonTapped {
     //code here
}

//Table VC.m
@property (strong, nonatomic) ViewController *myVC;

- (ViewController *)myVC {
    if (!_myVC) _myVC = [[ViewController alloc] init];
    return _myVC;
}

- (void)userEnteredText:(NSNotification *)notification {
     [self.myVC myButtonTapped]; //runs method without issue
     self.myVC.aButton.enabled = YES; //does not occur since aButton is nil - myVC is not nil
}

最佳答案

您需要研究@Hot Licks 提供的信息,以了解如何在对象之间保持引用,但我可以告诉您,部分问题在于您的 getter 方法 -

- (ViewController *)myVC {
    if (!_myVC) _myVC = [[ViewController alloc] init];   //  <-- This is a problem
    return _myVC;
}

如果您的 _myVC 变量为零,那么您的 getter 方法会分配一个 ViewController - 因此您不会获得对现有 viewController 的引用>。然后,当您为新的 viewController 调用普通的 init 方法时,它的任何属性都不会被初始化 - 因此您的按钮将得到 nil。

您不需要为这样的简单属性编写任何代码 - 为您创建的默认代码就足够了。您需要做的是从当前的 viewController 实例设置 myVC 属性。因此,在您的 viewController 中的某个地方,您将拥有

tableVC.myVC=self; 

您需要在引用 tableVC 的地方执行此操作 - 因此,如果您使用 Storyboard 和 Segue,或者在任何呈现或推送 table VC 的地方,这可能位于 prepareForSegue 中(如果您不是

关于ios - 尝试从另一个类访问时类中的对象为零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22752504/

相关文章:

iphone - AVPlayer 设置初始播放时间 iOS

ios - 临时免责声明

iPhone计算器输入时小数位反转

c++ - 在 C++ 中使用静态非成员变量与非静态成员变量

iphone - 为什么 CorePlot 0.2.2 对于模拟器构建良好,但对于设备却给出链接错误?

iOS "Exploding image"动画

android - 如何为原生移动应用程序进行部分产品发布?

ios - 多框架依赖 XCode

java - Java类中的实现和继承问题

python - 通过单击 PyQt4 按钮从另一个类调用函数