gpt4 book ai didi

ios - RestKit、核心数据、魔法记录、大量数据和滞后的 UI

转载 作者:行者123 更新时间:2023-11-29 02:09:03 25 4
gpt4 key购买 nike

我有一个应用程序可以存储有关餐馆的数据。他们的菜单、时间表等等。现在 DB 中大约有 200 家餐厅。该应用程序过去常常通过一次拍摄来检索这些地点,但加载时间太长,所以我决定一个一个地加载数据。在开始时,应用程序向服务器请求地点 ID 数组,然后通过 API 获取数据。

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

从没想过我会在使用 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];

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

最佳答案

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

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

您还应该真正在整个应用程序中使用 fetched results controller,如果您这样做,它们将自动检测 RestKit 保存的更改并更新您的 UI。

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

关于ios - RestKit、核心数据、魔法记录、大量数据和滞后的 UI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29481867/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com