0

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.

Rayfleck
  • 12,116
  • 8
  • 48
  • 74
l_r
  • 1,060
  • 12
  • 23
  • In fact, I made it simplier. I'm just passing a variable between the views to let them know that if the refresh is done or not. The first view that loads the feed from the web-service and refresh the db initiate the variable. Then the variable is passed through the views. It is not as clean as I wanted but it does the job. – l_r Feb 12 '12 at 18:09

1 Answers1

0

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.

Rayfleck
  • 12,116
  • 8
  • 48
  • 74
  • Thank you for your answer Rayfleck. However, as I have 5 navigation controllers, that do the same thing with other data, I would prefer not doing the refresh from the App Delegate because it would request the web-service 5 times (one for each Nav Controller) instead of refreshing only for a given Nav Controller (i.e. the the Views managed by this particular Nav Controller). – l_r Feb 06 '12 at 20:22