我的Cocoa Touch应用程序中有一个MainViewController,它显示一个包含UIProgressBar
视图的状态视图。
从MainViewController中创建并迭代FlickrImage
个模型对象。 FlickrImage
对象本身与Flickr API交互,这需要时间,这就是我希望用户看到进度条的原因。挑战(至少对我而言)现在是与progress
对象的UIProgressBar(发送FlickrImage
消息)进行交互。我是否使用NSNotificationCenter
执行此操作,或者我可以将MainViewController声明为FlickrImage
中的转发类并直接与UIProgressBar交互?
答案 0 :(得分:2)
最好的方法是不让模型调用任何内容,但use KVO观察模型,然后对模型更新时获得的消息作出反应。这是因为拥有单独的模型层的意义在于模型不应该知道有关数据如何呈现给用户的任何信息。
所以创建一个跟踪所有图像加载的类(很可能你已经有了这样的类)并执行以下操作:
[imageManager addObserver:self forKeyPath:@"progress" options:nil context:nil];
确保数据管理器类具有一个名为progress的声明属性(理想情况下值为0.0到1.0),当您更新管理器中的值时,必须使用点表示法:self.progress = newVal;
这比从模型类发送通知要清晰得多。另一种方法是将视图注册为经理的代表。当您应该使用委托时以及KVO更好时,没有明确的经验法则,尽管使用委托协议可能会略微减少开销。 Apple使用这两种方法,但有更多依赖KVO的倾向,在我看来这是一件好事。
答案 1 :(得分:0)
我更喜欢NSNotificationCenter,MainViewController注册为观察并更新UIProgressBar。
将对象MainViewController保存在FlickrImage中并从FlickrImage更新UIProgressBar,这使得从模型处理UI(你违反了MVC)