【发布时间】:2012-10-19 22:26:13
【问题描述】:
我是 IOS 开发和 Restkit 的新手。 我正在创建一个应用程序,其中数据以 json 格式从外部 web 服务加载,并且有数千个用户对象,它们在 coredata 中映射。
我正在加载这些用户如下:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
DBUser* user = [DBUser currentUser];
if ([user isLoggedIn]) {
[self loadRequiredData];
}
}
然后在loadRequiredData中
- (void)loadRequiredData {
RKObjectManager *manager = [RKObjectManager sharedManager];
manager.requestQueue.concurrentRequestsLimit = 10;
[manager loadObjectsAtResourcePath:@"/users" delegate:self];
}
在 CoreData 中映射所有用户对象大约需要 4-5 分钟。 现在的问题是,当 Restkit 忙于在 CoreData 中映射这数千个用户时,发送到 web 服务的任何其他请求都会等待。 当所有用户都映射到 CoreData 中后,就会执行等待请求。
我什至尝试将 ConcurrentRequestLimit 的数量增加到 10
manager.requestQueue.concurrentRequestsLimit = 10;
但这也行不通
那么有没有办法在后台或其他线程中映射对象?这样在此期间发送的任何其他请求都应该快速执行。
【问题讨论】:
-
您是否需要立即向这数千名用户展示或进行更改?如果没有,他们也许可以利用延迟加载,您的应用程序只显示用户请求该数据时需要显示的内容。想想苹果的旧应用商店。它向您显示 25 个应用程序,然后您再按加载 25 个,它又请求 25 个,它不会连续下载 650,000 个应用程序。
-
我正在使用TITokenField 发送消息。当用户在收件人文本字段中键入字符时,我只需要将所有用户名显示为自动完成。至于延迟加载,当用户输入字符时它似乎更慢,我可能需要向 web 服务发布请求以获取匹配的名称。
-
您也许可以使用 UITextField 委托方法 shouldReplaceText:在该方法中,每次用户键入字符时,都会触发该方法。您可以使用(旧文本字段文本 + 新字符串)的组合向您的 Web 服务发送请求,以异步查找具有相似名称的用户,然后在显示结果列表的自定义视图中显示结果。在用户点击一行时,您将该文本从您的自定义视图传递回您的委托视图控制器。这独立于任何外部库。
标签: iphone objective-c ios mapping restkit