моя проблема очень странная, и я прошу помощи. Я хочу объяснить вам, как работает моя система. У меня есть две проблемы с этим.
Я делаю приложение, которое имеет две таблицы. Я использую основные данные. ТаблицыКатегориииПродукция, в основных данных я установил отношение один ко многимКатегорияможет иметь несколькоПродукция,Товарможет парить одинКатегория.
Вот основная схема
Category {
site_id
name
allProducts ->> Product
}
Product {
site_id
name
category -> Category
}
В этом приложении у меня есть процесс обновления, и этот процесс работает в фоновом потоке. Я создал контекст для этого потока и все изменения, которые я сохраняю в этом контексте.
Все вычисления я выполняю в фоновом потоке в
[context performBlock:^{
// all my operations for updating storing categories and products
}]
Это поток процесса обновления
С сервера получить JSON с информацией, в какой категории есть какие продуктыarray((category_site_id > array(product_site_id1, product_site_id2...))
Пройти через категории JSON и сохранить сущность категории,Я получаю имя и идентификатор сайта _из JSON, создаю объект и устанавливаю эти свойства
Пропустите продукты JSON и создайте сущность продукта, задайте имя и сохраните _идентификатор из свойств из JSON
Затем основная часть
Я перехожу к категории foreach из JSON и получаю идентификатор сайта _всех продуктов как NSArray, я использую запрос на выборку с предикатом и критериями IN, чтобы получить все объекты продуктов из контекста, у которых есть идентификатор сайта _IN. множество. Но у меня всегда был нулевой результат. Это странно, потому что я вызываю результаты извлечения по контексту в фоновом потоке, и я также обновил этот контекст на шагах 3 и 4.
Затем я пробую следующую вещь, перед шагом 6 я [context save:&error]
и добавляю сон примерно на 30 секунд, и когда после этого программа переходит к шагу 6, все работает фантастически, мои результаты выборки получают продукты с предикатом с критериями IN. Это моя первая проблема, если вы меня понимаете, я не могу получить продукты по идентификаторам, мне нужно подождать около 30 секунд, чтобы сохранить контекст в SQLLiteDB, это очень странно. Также это странно, потому что, когда я хочу получить категорию с запросом на выборку по идентификатору, я могу получить ее без проблем(возможно, это потому, что шаг 5 занимает около одной минуты ).
Моя следующая проблема, когда я жду эти 30 секунд, а затем прохожу через категории. На основе идентификатора сайта категории _я получаю объект категории из контекста, а также на шаге 6 я получаю все продукты на основе идентификаторов сайта продукта _, полученных с помощью JSON и запроса на выборку, и теперь я хочу добавить продукты в категорию, и я вызываю следующий
[category setAllProducts :results] // результаты представляют собой NSSet продукта, категория представляет собой объект объекта
NSError *ошибка = ноль; [сохранение контекста :&error];
и я делаю, что категория foreach (получена на шаге 3 с сервера в формате JSON)
когда все будет сделано, я не вижу продукты в категориях в пользовательском интерфейсе. Я также жду некоторое время, чтобы все данные были сохранены в БД, но ничего не происходит,
И ТОГДА, КОГДА Я ОСТАНАВЛИВАЮ ПРИЛОЖЕНИЕ И ЗАПУСКУ ЕГО СНОВА, Я МОГУ УВИДЕТЬ ПРОДУКТЫ В КАТЕГОРИЯХ:(
очень странная проблема, пожалуйста, помогите мне, я не знаю, где я ошибаюсь. Я могу выкладывать части кода, код не маленький и прошу помощи исходя из описания процесса.
Большое спасибо