首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UIScrollView异步填充的对象设计

UIScrollView异步填充的对象设计
EN

Stack Overflow用户
提问于 2010-12-05 06:05:07
回答 1查看 273关注 0票数 1

大家好,

我是Cocoa的新手,任务是为运行4.2的iPhone和iPad开发一个原型应用程序。我在设计一个将数据回填到我用来填充UIScrollView的自定义对象中的过程时遇到了问题。每个自定义对象显示影片数据(图稿、演员等)这些数据是从REST服务中调用的。

我希望这个Movie对象负责它的渲染,因此将它的数据需求“外包”给一个单独的对象,这个对象可以执行实际的REST调用、JSON解析等。我一直在尝试使用委托、NSOperation或直接回调来交付解决方案,但我在辨别该采用哪种方法时遇到了麻烦。

我知道我需要在后台处理这些数据,以使UI在主线程上保持活动状态,但我正在努力解决如何设计这些对象之间的连接:

代码语言:javascript
复制
TheaterViewController //ViewController that contains the UIScrollView

目前,我正在用11个(任意分配) MovieView项填充TheaterViewController的UIScrollView - MovieView显示了一个ActivityIndicator,让用户知道它正在努力交付内容

代码语言:javascript
复制
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已经完成了数据获取(最好是以异步方式),这样它就可以呈现它的完整视图。

有没有人能告诉我有没有这样的异步回调过程的文档或例子?

感谢各位好心人的指点-

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-12-05 15:24:53

委派肯定是一条很好的路线。我将创建一个DataAgentDelegate协议,其中包含一个名为-(void)dataFetchComplete@required方法。它将按如下方式实现:

在DataAgent.h中

代码语言:javascript
复制
@interface DataAgent : NSObject {
    id<DataAgentDelegate> delegate;
}

@property (nonatomic, retain) id<DataAgentDelegate> delegate;

在DataAgent.m中

代码语言:javascript
复制
- (void) fetchingComplete {
    if (delegate != nil) {
        [delegate dataFetchComplete];
    }
}

在MovieView.h中

代码语言:javascript
复制
@interface MovieView : NSObject <DataAgentDelegate> {
    //...
}

在MovieView.m中

代码语言:javascript
复制
- (void) startDataFetch {
    DataAgent *dataAgent = [[DataAgent alloc] init];
    dataAgent.delegate = self;
    [dataAgent startFetching];
}


- (void) dataFetchComplete {
    //render fetched assets in view 
}

我想不出任何具体的示例程序来实现这一点,但这是一件非常常见的事情。在处理异步事件时,委托非常方便。我希望这能帮到你!

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

https://stackoverflow.com/questions/4356083

复制
相关文章

相似问题

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