ARC中的IBOutlet发布并设置为零。怎么避免这个?目标c

时间:2012-08-18 07:41:26

标签: objective-c ios storyboard automatic-ref-counting

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

IBOutlet

开始时@property (weak, nonatomic) IBOutlet UITableView *dataTable; 不是dataTable,而是当我尝试从其他类(通过appDelegate)访问它时。如何解决这个问题?

更新 我从nil

中调用此方法
UIViewController

完成后,我有数据显示,我从[appDelegate.myClass loginWithUserName:loginField.text andPassword:pwdField.text]; 方法调用此代码:

loginWithUserName

这是我 MyViewController *controller = [[AppDelegate sharedStoryboard] instantiateViewControllerWithIdentifier:@"MyViewController"]; [controller audioLoaded]; 中的方法,重新加载数据

UIViewController

1 个答案:

答案 0 :(得分:1)

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

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

虽然从另一个视图控制器访问UITableView并不是一个好习惯。

编辑:

您应该重新考虑整个方法,将该逻辑从您的appdelegate移动到将执行登录的专用类。您可以创建一个UIViewController与表可以实现的简单协议,然后,在调用login方法时,将引用传递给当前的viewcontroller,如

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

LoginDelegate就在这一行:

@protocol LoginDelegate
- (void)audioLoaded;
@end

这样你就可以打电话了

[sender audioLoaded];