问候集体,
我是Cocoa的新手,他的任务是处理运行4.2的iPhone和iPad的原型应用程序。我在设计一个将数据回填到我用来填充UIScrollView的自定义对象的进程时遇到了问题。每个自定义对象都显示电影数据(插图,演员等),并且这些数据是从REST服务调用的。
我希望这个Movie对象负责它的渲染,因此将其数据需要“移植”到一个单独的对象,该对象可以进行实际的REST调用,JSON解析等等。我一直试着把它包裹起来使用代表,或NSOperation或直接回调来提供解决方案,但我无法辨别出追求的途径。
我知道我需要在后台处理这些数据,以保持UI在主线程上保持活跃,但我很难设法如何设计这些对象之间的连接:
TheaterViewController //ViewController that contains the UIScrollView
目前,我正在使用11个(任意分配)MovieView项目填充TheaterViewController的UIScrollView - MovieView显示一个ActivityIndicator,让用户知道它正在处理提供内容
MovieItem //a single movie and it's respective data
MovieView //individual View that displays a single MovieItem content
DataAgent //background-capable object that fetches data from app server
DataWarehouse //Singleton-designed class that maintains an NSMutableArray of MovieItem's
在我目前的设计中,TheaterViewController使用11个MovieView填充UIScrollView。然后每个MovieView都会获取自己的数据。我知道如何让DataAgent检查DataWarehouse的内容,如果不存在,则调用REST服务。我不知道怎么做,是通知/回调/发布到MovieView,DataAgent已经完成了数据的获取(最好以异步方式),这样它就可以渲染完成的视图。
有人能指出一个文档,或做这种异步回调过程的例子吗?
提前感谢你们提出的任何指示 -
答案 0 :(得分:0)
代表团肯定是一条很好的路线。我会制作一个DataAgentDelegate
协议,其中包含一个名为@required
的{{1}}方法。它将全部实现如下:
在DataAgent.h中
-(void)dataFetchComplete
在DataAgent.m
中@interface DataAgent : NSObject {
id<DataAgentDelegate> delegate;
}
@property (nonatomic, retain) id<DataAgentDelegate> delegate;
在MovieView.h中
- (void) fetchingComplete {
if (delegate != nil) {
[delegate dataFetchComplete];
}
}
在MovieView.m
中@interface MovieView : NSObject <DataAgentDelegate> {
//...
}
我想不出任何具体的示例程序,但这是很常见的事情。当您处理异步事件时,委派非常方便。我希望这有帮助!