我正在开发一个基于地图的应用程序。因此,一旦用户打开MapViewController
,我将每5秒加载一些数据。
我正在使用导航控制器(推视图控制器)。
因此,每次用户转到MapViewController
viewdidload
方法调用时。我不想那样。
这就是为什么我要避免使用像viewdidload
这样的tabbarcontroller
方法。
有没有办法实现这个目标?
答案 0 :(得分:2)
viewDidLoad
正在被调用,因为当您从导航控制器的顶部弹出MapViewController
时,MapViewController
将被取消分配。重新创建视图控制器时,它将再次分配,并再次加载视图。如果在包含导航控制器的类中保留对viewDidLoad
的引用,则ARC将不会释放该对象,您可以使用此引用将其推回到堆栈中,以便{@ 1}}不会被调用试。
编辑:添加代码供参考:
MapViewContoller *mapViewController; // declared globally so there's a strong reference.
- (void) openMapViewController {
if (!mapViewController) {
mapViewController = [self.storyboard instantiateViewControllerWithIdentifier: MapViewControllerID];
}
[self.navigationController pushViewController: mapViewController, animated: YES];
}
答案 1 :(得分:0)
viewDidLoad旨在使用无法或无效地在XIB中配置100%的接口。有时,您希望在视图上设置的特定属性不可用在XIB中。有时,您使用自动布局,并且您意识到编辑器实际上比编写自动布局代码更糟糕。有时,您需要在将图像设置为按钮背景之前修改图像。
如果您不想这样做,请将viewDidLoad设为空。比避免。或
将代码conditionaly添加到viewDidLoad。
(void)viewDidLoad {
[super viewDidLoad];
if(condition) {
// put your code here
}
}
答案 2 :(得分:0)
Try this
-(void)clickForPush{
// declarre viewcontroller e.g 'saveRecipeVC' instance globally in interface
if (!saveRecipeVC) {
saveRecipeVC = [self.storyboard instantiateViewControllerWithIdentifier:SaveRecipeVCID];
}
[self.navigationController pushViewController:saveRecipeVC animated:YES];
}