Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

iOS model layer notifying Controller Object

https://developer.apple.com/library/archive/documentation/General/Conceptual/DevPedia-CocoaCore/MVC.html

At the above link, I see the following in regards to how the model layer should communicate with the ViewController.

"When a model object changes (for example, new data is received over a network connection), it notifies a controller object, which updates the appropriate view objects."

My question is, how does the model object notify the Controller object? What are various ways this can be done? My model layer gets the user's location and then calls a web service. How should I notify the controller object when that data is downloaded?

like image 627
user1467188 Avatar asked Jul 21 '12 20:07

user1467188


Video Answer


1 Answers

There are several ways to do this, depending on your specific case. Generally you would use a protocol/delegate implementation, key value observing, or notifications. There is a pretty good overview here.

Edit:

Thought I should add, as the comment to this answer mentioned: using callback blocks is also a very solid option, depending on your needs. There are a lot of possible deciding factors on what solutions are best for what cases but here is a general outline I follow.

If you are guaranteed to only need one observer at a time: I generally use blocks or delegates. My personal preference is that I use blocks if there are only one or two callbacks because this is where they shine, but I use delegate protocols if there more than a few possible methods.

If you may need multiple observers, I use notifications via NSNotificationCenter.

I use Key-Value-Observing when I only need to observe specific properties on an instance, instead of events.

like image 61
Dima Avatar answered Sep 20 '22 21:09

Dima