我在我的Cocoa Touch应用程序中有一个MainViewController,它显示一个包含UIProgressBar视图的状态视图。
在MainViewController中创建FlickrImage模型对象并对其进行迭代。FlickrImage对象本身与Flickr API交互,这需要时间,这就是我希望用户看到进度条的原因。现在的挑战(至少对我来说是这样)是从FlickrImage对象与UIProgressBar (发送progress消息)进行交互。我是使用NSNotificationCenter来实现这一点,还是可以在FlickrImage中将MainViewController声明为forward类并直接与UIProgressBar交互?
发布于 2009-12-17 23:22:01
最好的方法是而不是让模型调用任何东西,而是使用use KVO来观察模型,然后在模型更新时对收到的消息做出反应。这是因为拥有一个单独的模型层的意义在于,模型不应该知道数据是如何呈现给用户的。
因此,创建一个跟踪所有图像加载情况的类(很可能您已经有了这样一个类),并执行如下操作:
[imageManager addObserver:self forKeyPath:@"progress" options:nil context:nil];确保数据管理器类具有一个名为progress的声明属性(理想情况下,该属性的值介于0.0到1.0之间),并且在更新管理器中的值时,必须使用点表示法:self.progress = newVal;
这比从模型类发送通知要干净得多。另一种方法是将视图注册为管理器上的委托。对于何时应该使用委托以及何时KVO更好,没有明确的经验法则,尽管使用委托协议可能会稍微减少一些开销。苹果使用了这两种方法,但有一种趋势是更多地依赖KVO,在我看来这是一件好事。
发布于 2009-12-17 21:43:06
我更喜欢NSNotificationCenter,MainViewController注册为观察并更新UIProgressBar。
将对象MainViewController保留在FlickrImage中,并从FlickrImage更新UIProgressBar,这使得从模型处理UI (您违反了MVC)
https://stackoverflow.com/questions/1920982
复制相似问题