У меня есть приложение, в котором хранятся данные о ресторанах. Их меню, расписание и так далее. Theres ~ 200 ресторанов в БД к настоящему времени. Приложение, используемое для извлечения этих мест одним выстрелом, но для загрузки было слишком много времени, поэтому я решил загрузить данные по одному. В начале приложение запрашивает у сервера массив идентификаторов места, затем получает данные через API.RestKit, основные данные, магическая запись, множество данных и пользовательский интерфейс отладки
Я установил блоки завершения для операций РК в фоновые очереди, но это не помогло. Прокрутки работают не достаточно сглаженно, а иногда и приложение даже взаимоблокировки (sic!) Или сбои без вывода ошибок в консоли. Я пробовал использовать Инструменты, чтобы определить, что делает UI отрывистым, но не удалось. Я даже отключил функции загрузки и сортировки изображений. Раньше у меня были запросы запросов RK, завернутые в @synchronized, поэтому я удалил их, но никакого эффекта.
Никогда не думал, что я столкнулся с такой проблемой после нескольких недель опыта работы с объективом-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 - это ~ 1.5Mb. Интересно, что произойдет, если будет более 1 тыс. Ресторанов. Это хороший способ загрузить такие данные? Каковы наилучшие методы?
Как вы пришли к использованию RK & MR таким образом? – Wain
Есть ли причина, по которой вы используете MR, и причина, по которой вы сами создаете очередь на операцию запроса? – Wain
Я не автор приложения, поэтому я не знаю, почему предыдущий парень сделал это именно так. Я проверил код MR, и он просто инициализирует дочерний контекст с типом параллелизма NSPrivateQueueConcurrencyType. MR используется во всем приложении, я полагаю, что для удобства, например, вы можете получить первый объект в БД одной строкой кода: APPlace * place = [APPlace MR_findFirst]; – Alexander