Objective c ARC中的IBOutlet释放并设置为零。如何避免这种情况?目标c
我不熟悉ARC和故事板。我已从我的Objective c ARC中的IBOutlet释放并设置为零。如何避免这种情况?目标c,objective-c,ios,storyboard,automatic-ref-counting,Objective C,Ios,Storyboard,Automatic Ref Counting,我不熟悉ARC和故事板。我已从我的UIViewController将IBOutlet设置为UITableView。 一段时间后,我的IBOutlet设置为nil,我无法从其他类重新加载它。 这是我的数据表IBOutlet: @property (weak, nonatomic) IBOutlet UITableView *dataTable; 在开始时,dataTable不是nil,但在我尝试从另一个类(通过appDelegate)访问它时不是。如何解决这个问题 更新 我从我的UIViewCo
UIViewController
将IBOutlet
设置为UITableView
。
一段时间后,我的IBOutlet
设置为nil,我无法从其他类重新加载它。
这是我的数据表
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;
但是,从另一个视图控制器访问UITableView不是一个好的做法
编辑:
您应该重新考虑整个方法,将该逻辑从appdelegate移动到将执行登录的专用类。您可以创建一个简单的协议,UIViewController和表可以实现该协议,然后在调用login方法时,传递对当前viewcontroller的引用,如
loginWithUserName:andPassword:andCaller:(id<LoginDelegate>)sender
这样你就可以打电话了
[sender audioLoaded];
+1.您真的不应该访问另一个视图控制器的nib文件。不,不。我从其他类调用方法reloadMyDataTable。此方法在同一UIViewControllery中,您仍在对不可见的表视图执行操作。无需从其他视图控制器执行此操作。你不能在视图上重新加载数据吗?会出现吗?但是我的UIViewController是聚焦的,它没有消失。strong没有帮助,它是nil,在代码中实例化一个新的视图控制器,您没有引用一个已经可见的视图控制器,因此当您调用它时,UITableView仍然是nil。您应该重新考虑整个方法,将该逻辑从appdelegate移动到将执行登录的专用类。然后,在调用login方法时,传递对当前viewcontroller的引用,类似于loginWithUserName:andPassword:andCaller:(id)sender。。。这样,您只需调用[sender audioLoaded];您确定已在interface builder中连接了所有适当的插座吗?是的,我确定。我认为实例化eviewcontrollerwhidentifier中存在问题
[sender audioLoaded];