gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 03:06:06 25 4
gpt4 key购买 nike

我有一个包含按钮属性的 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/

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