RestKit,核心数据,神奇记录,大量数据和滞后用户界面



我有一个存储餐馆数据的应用程序。他们的菜单、时间表等等。到目前为止,DB大约有200家餐厅。该应用程序过去只需一次点击即可检索这些位置,但加载时间太长,所以我决定逐个加载数据。在启动应用程序时,要求服务器提供一个位置的id数组,然后通过API获取数据。

我将RK操作的完成块设置为后台队列,但没有帮助。滚动条运行得不够流畅,有时应用程序甚至会死锁(原文如此!)或崩溃,控制台中没有错误输出。我曾经尝试过使用Instruments来定位UI不稳定的原因,但没有成功。我甚至关闭了图像加载和排序功能。我曾经用@synchronized包装RK的请求调用,所以我删除了它,但没有效果。

在使用objective-c几周后,我从未想过会面临这样的问题。我已经尝试了所有可能的方法,所以现在我有点放弃了。

请帮帮我:)

下面的代码在应用程序启动后立即被调用200次。

NSURLRequest *request = [[DEAPIService sharedInstance].manager requestWithObject:nil
                                                                              method:RKRequestMethodGET
                                                                                path:path
                                                                          parameters:params];
    //DLog(request.URL.absoluteString);
    NSManagedObjectContext *context = [NSManagedObjectContext MR_contextWithParent:[NSManagedObjectContext MR_contextForCurrentThread]];
    RKManagedObjectRequestOperation *operation = [[DEAPIService sharedInstance].manager managedObjectRequestOperationWithRequest:request
                                                                                                        managedObjectContext:context
                                                                                                                         success:success
                                                                                                                         failure:failure];
    // dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0);
    dispatch_queue_t backgroundQueue = dispatch_queue_create("com.name.bgqueue", NULL);
    operation.successCallbackQueue = backgroundQueue;
    [[DEAPIService sharedInstance].manager enqueueObjectRequestOperation:operation];

在此之前设置了响应描述符。DB中也有许多关系。我查了一下DB的文件大小——大约是1.5Mb。我想知道如果有超过1000家餐厅会发生什么。这是加载此类数据的好方法吗?最佳实践是什么?

好的,根据提供的信息,您应该能够简化很多。目前,您的代码正在下降到一个较低的级别,并参与到线程和上下文管理中,您想让RestKit来解决这些问题。从外观上看,您有一个正确配置的对象管理器和核心数据堆栈,所以应该让它来完成工作。

这意味着删除请求、上下文和请求操作代码,只需调用"getObjectsAtPath:parameters:success:failure:"。RestKit将在后台处理所有的下载和映射,并保存上下文。

你还应该在整个应用程序中使用提取的结果控制器,如果你使用了,它们会自动检测RestKit保存的更改并更新你的UI。

一旦你做到了,任何对UI的阻止都与RestKit和你的下载要求无关,应该与后续的图像管理/下载有关。

最新更新