2016-12-02 152 views
2

我正在开发一个基于地图工作的应用程序。所以一旦用户打开MapViewController,我会每5秒钟加载一些数据。有没有办法避免调用像tabbarcontroller viewdidload方法?

我正在使用导航控制器(推视图控制器)。

所以每当用户去MapViewControllerviewdidload方法调用。我不想那样。

这就是为什么我试图避免viewdidload方法如tabbarcontroller

有什么办法可以达到这个目的吗?

+0

把导航控制器(推视图控制器) –

回答

0

试试这个

-(void)clickForPush{ 
    // declarre viewcontroller e.g 'saveRecipeVC' instance globally in interface 
    if (!saveRecipeVC) { 
     saveRecipeVC = [self.storyboard instantiateViewControllerWithIdentifier:SaveRecipeVCID]; 
    } 
    [self.navigationController pushViewController:saveRecipeVC animated:YES]; 
} 
+0

哇,像魅力一样工作。接受为正确的答案。谢谢 – Himanth

+0

欢迎@himanth – KKRocks

2

viewDidLoad正在调用,因为当您将其从导航控制器的顶部弹出时,您的MapViewController正在取消分配。当您重新创建视图控制器时,它将重新分配,然后视图再次加载。如果您在包含导航控制器的类中保留对MapViewController的引用,那么ARC将不会释放该对象,并且您可以使用此引用将其推回堆栈,以免再次调用viewDidLoad

编辑:添加代码以供参考:

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]; 
} 
+0

的代码能否请您提供更多信息,如何做到这一点。谢谢 – Himanth

+0

当然,@himanth。我看到你已经接受了另一个答案,这很好,但我添加了与你的问题相关的代码,正确地突出显示了Obj-C,并且对于未来偶然遇到这个问题的任何初学者,在语法上都是正确的,并且想要理解为什么会这样发生错误。 –

+0

谢谢@kgaleman – Himanth

0

viewDidLoad中打算使用时,不可能或有效地在一个XIB配置接口的100%。有时,您希望在视图上设置的特定属性在XIB中不可用。有时候,你使用自动布局,并且你意识到编辑器实际上比编写自动布局代码更糟糕。有时,您需要修改图像,然后将其设置为按钮的背景。

如果你不想做这些事情让你的viewDidLoad为空。比避免。或

将条件添加到您的viewDidLoad中。

(void)viewDidLoad { 
    [super viewDidLoad]; 

    if(condition) { 
    // put your code here  
    } 

    } 
相关问题