我正在编写一个连接到服务器并获取图像列表的应用程序,然后下载它们并将它们显示在网格中。
此过程的第一部分由我连接到服务器的客户端类完成,并要求提供图像URL列表。我在视图控制器中执行此操作并将其传递给我的视图。
第二部分由我编写的图像缓存类完成,该类获取每个图像URL并检查应用程序是否已下载并先前存储它。如果是这样,它从文件系统获取图像并返回它。否则它会异步下载图像并存储它。
我现在正在做的事情,我的视图控制器获取图像标识符列表并将它们传递到我的视图中。然后,视图为每个图像创建图像视图,并使用占位符图像填充它们,然后询问每个图像的图像缓存,并在下载图像时填充图像。
对于我的视图绘制功能本身而言,设计下载图像的逻辑是不是很糟糕?感觉有点像违反MVC,因为我的观点正在努力获取它应该显示的数据。但是,实际的网络正在其他地方(在图像缓存类中)进行,并被抽象掉,以便视图只是调用[ImageCache getImageForIdentifier:... completionHandler:...]
。
答案 0 :(得分:1)
您的ImageCache
类是Model级别类的示例。它不了解任何UI。好的MVC会说View类就像你的网格视图一样永远不会直接与Model类对话。这就是控制器的用途。
更简洁的实现方法是让控制器使用ImageCache进行下载并更新网格视图。这会将一些业务逻辑从网格视图类中移出,并使其仅担心呈现。
答案 1 :(得分:1)
嗯,视图类不应该进行任何网络调用。视图只能与Controller通信以获取需要显示的数据。所以,
我的目标是创建三个不同的类,
ImageCache类存储已下载的图像,可能在CoreData中。每次从ImageCache以及稍后需要从ImageDataController获取更多新图像时,ImageCollection类将被填充。