大家好,
我是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服务。我不知道怎么做的是,通知/回调/post到MovieView,DataAgent已经完成了数据获取(最好是以异步方式),这样它就可以呈现它的完整视图。
有没有人能告诉我有没有这样的异步回调过程的文档或例子?
感谢各位好心人的指点-
发布于 2010-12-05 15:24:53
委派肯定是一条很好的路线。我将创建一个DataAgentDelegate协议,其中包含一个名为-(void)dataFetchComplete的@required方法。它将按如下方式实现:
在DataAgent.h中
@interface DataAgent : NSObject {
id<DataAgentDelegate> delegate;
}
@property (nonatomic, retain) id<DataAgentDelegate> delegate;在DataAgent.m中
- (void) fetchingComplete {
if (delegate != nil) {
[delegate dataFetchComplete];
}
}在MovieView.h中
@interface MovieView : NSObject <DataAgentDelegate> {
//...
}在MovieView.m中
- (void) startDataFetch {
DataAgent *dataAgent = [[DataAgent alloc] init];
dataAgent.delegate = self;
[dataAgent startFetching];
}
- (void) dataFetchComplete {
//render fetched assets in view
}我想不出任何具体的示例程序来实现这一点,但这是一件非常常见的事情。在处理异步事件时,委托非常方便。我希望这能帮到你!
https://stackoverflow.com/questions/4356083
复制相似问题