gpt4 book ai didi

objective-c - ARC 中的 IBOutlet 释放并设置为 nil。如何避免这种情况? objective-c

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

我是 ARC 和 Storyboard新手。我已将 UIViewController 中的 IBOutlet 设置为 UITableView。一段时间后,我的 IBOutlet 设置为 nil,我无法从其他类重新加载它。这是我的 dataTable IBOutlet:

@property (weak, nonatomic) IBOutlet UITableView *dataTable;

一开始dataTable不是nil,但当我尝试从另一个类(通过appDelegate)访问它时则不是。如何解决这个问题?

更新我从我的 UIViewController

调用这个方法
[appDelegate.myClass loginWithUserName:loginField.text andPassword:pwdField.text];

完成后,我有数据要显示,我从 loginWithUserName 方法调用此代码:

   MyViewController *controller = [[AppDelegate sharedStoryboard] instantiateViewControllerWithIdentifier:@"MyViewController"];
[controller audioLoaded];

这是我的 UIViewController 中的方法,它会重新加载数据

 -(void) audioLoaded
{
//it is nil here
[self.dataTable reloadData];
}

最佳答案

将属性设置为强保留对象:

@property (strong, nonatomic) IBOutlet UITableView *dataTable;

从另一个 View Controller 访问 UITableView 并不是一个好习惯。

编辑:

您应该重新考虑整个方法,将该逻辑从应用程序委托(delegate)移动到将执行登录的专用类。您可以创建一个带有表的 UIViewController 可以实现的简单协议(protocol),然后,在调用登录方法时,传递对当前 View Controller 的引用,例如

loginWithUserName:andPassword:andCaller:(id<LoginDelegate>)sender

LoginDelegate 是这一行的内容:

@protocol LoginDelegate
- (void)audioLoaded;
@end

这样就可以调用了

[sender audioLoaded];

关于objective-c - ARC 中的 IBOutlet 释放并设置为 nil。如何避免这种情况? objective-c ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12016851/

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