首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >与模型类中的UIProgressBar交互

与模型类中的UIProgressBar交互
EN

Stack Overflow用户
提问于 2009-12-17 19:00:41
回答 2查看 383关注 0票数 0

我在我的Cocoa Touch应用程序中有一个MainViewController,它显示一个包含UIProgressBar视图的状态视图。

在MainViewController中创建FlickrImage模型对象并对其进行迭代。FlickrImage对象本身与Flickr API交互,这需要时间,这就是我希望用户看到进度条的原因。现在的挑战(至少对我来说是这样)是从FlickrImage对象与UIProgressBar (发送progress消息)进行交互。我是使用NSNotificationCenter来实现这一点,还是可以在FlickrImage中将MainViewController声明为forward类并直接与UIProgressBar交互?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-12-17 23:22:01

最好的方法是而不是让模型调用任何东西,而是使用use KVO来观察模型,然后在模型更新时对收到的消息做出反应。这是因为拥有一个单独的模型层的意义在于,模型不应该知道数据是如何呈现给用户的。

因此,创建一个跟踪所有图像加载情况的类(很可能您已经有了这样一个类),并执行如下操作:

代码语言:javascript
复制
[imageManager addObserver:self forKeyPath:@"progress" options:nil context:nil];

确保数据管理器类具有一个名为progress的声明属性(理想情况下,该属性的值介于0.0到1.0之间),并且在更新管理器中的值时,必须使用点表示法:self.progress = newVal;

这比从模型类发送通知要干净得多。另一种方法是将视图注册为管理器上的委托。对于何时应该使用委托以及何时KVO更好,没有明确的经验法则,尽管使用委托协议可能会稍微减少一些开销。苹果使用了这两种方法,但有一种趋势是更多地依赖KVO,在我看来这是一件好事。

票数 2
EN

Stack Overflow用户

发布于 2009-12-17 21:43:06

我更喜欢NSNotificationCenter,MainViewController注册为观察并更新UIProgressBar。

将对象MainViewController保留在FlickrImage中,并从FlickrImage更新UIProgressBar,这使得从模型处理UI (您违反了MVC)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1920982

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档