0

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

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

4

2 回答 2

2

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

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

[imageManager addObserver:self forKeyPath:@"progress" options:nil context:nil];

确保数据管理器类有一个名为 progress 的声明属性(理想情况下,值的范围是 0.0 到 1.0),并且当您更新管理器中的值时,您必须使用点符号:self.progress = newVal;

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

于 2009-12-17T15:22:00.600 回答
0

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

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

于 2009-12-17T13:43:06.400 回答