Thursday, February 16, 2012

How to implement UINavigationControllerDelegate to call web service for data driven app


In my app, I have 5 navigation controllers. One of the navigation controllers displays 3 view controllers sharing the same data (from a Sqlite database). The only difference is that they present the data in a different way :



  • ViewController 1 = recipes sorted by countries

  • ViewController 2 = recipes sorted by vegetables

  • ViewController 1 = recipes sorted by wines to drink with



The Sqlite database is fed with a web-service. As new recipes may be added anytime, I need to refresh the database anytime the application becomes active. And as the application can become active on any of the view controller (depending on the one selected when the app went to background) I have to write the refresh code in the 3 view controller implementation files.



I think this method sucks because the web-service is called when the user switch between the navigation controllers. This create frequent and useless traffic and database updates. I would prefer to do the job only one time per application use (active/background). I was thinking of UINavigationControllerDelegate. This way I will do the refresh only once, when the application becomes active, and whatever the navigation controller is.



My questions are :



  • Do you think this is a good method or would you suggest another ?

  • Do you know how to implement the UINavigationControllerDelegate in this case ?

  • Is this possible only in the App Delegate or can I do it outside ?



Thanks in advance for any help.

1 comment:

  1. You're on the right track. I think you should create a separate class that does the refresh, and you should call that class from your appDelegate's

    applicationDidBecomeActive:


    method. It really should have nothing to do with navigation conrollers.

    ReplyDelete