0

我是 ARC 和 Storyboard 的新手。我已经IBOutletUITableView我的UIViewController. 一段时间后,我的IBOutlet设置为零,我无法从其他类重新加载它。这是我的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];
 }
4

1 回答 1

1

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

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

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

编辑:

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

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

LoginDelegate 在此行中的位置:

@protocol LoginDelegate
- (void)audioLoaded;
@end

这样你就可以打电话

[sender audioLoaded];
于 2012-08-18T07:43:07.857 回答