【问题标题】:Restkit object mapping in background后台的 Restkit 对象映射
【发布时间】: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


【解决方案1】:

只需像这样调用方法 loadRequiredData [self performSelectorInBackground:@selector(loadRequiredData) withObject:nil];

【讨论】:

    【解决方案2】:

    这很明显,如果您在移动应用程序数据库中插入数千个条目,则必须花费很多时间。您可以使用此方法在映射开始时显示活动指示器。

    - (void)objectLoader:(RKObjectLoader *)loader willMapData:(inout id *)mappableData;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-08-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-12
      • 2017-12-15
      相关资源
      最近更新 更多