программирование iPhone - сохранение фона с основными данными - PullRequest
4 голосов
/ 28 ноября 2011

Я пытаюсь сохранить данные в основные данные в фоновом потоке, так как это занимает довольно много времени для сохранения.

Я сделал:

[self performSelectorInBackGround:@selector(insertRecord:) withObject:data];

Когда все работает нормально, пока строка в insertRecord Метод не достигнет contextsave:&error.Программа получила сигнал: "SIGABRT"

Я что-то не так делаю?он работает нормально, когда он в основном потоке, я просто перемещаю коды в другой метод и запускаю его в фоновом режиме, и он больше не работает.

Ответы [ 2 ]

6 голосов
/ 28 ноября 2011

Проблема в том, что контексты управляемого объекта не являются поточно-ориентированными.Если ваш -insertRecord: метод использует контекст управляемого объекта основного потока, вы напрашиваетесь на неприятности.

В блоге Какао - моя подруга есть статья Основные данные и потоки без головной боли на эту тему и предлагаются некоторые стратегии для сохранения в фоновом режиме.Основная идея состоит в том, чтобы внести изменения в контекст, принадлежащий фоновому потоку, а затем объединить изменения в контексте основного потока.Это дает вам современный контекст, который вы можете сохранить в фоновом режиме, сохраняя актуальность контекста основного потока.

6 голосов
/ 28 ноября 2011

В соответствии с разделом «Параллельность с базовыми данными» Руководство по программированию базовых данных :

Шаблон, рекомендуемый для параллельного программирования с базовыми данными:ограничение потока: каждый поток должен иметь свой собственный полностью закрытый контекст управляемого объекта.

и

Используя ограничение потока, вы не должны передавать управляемые объекты или контексты управляемого объекта между потоками.

Похоже, вы передаете управляемый объект в фоновый поток, что запрещено.Я не знаю, пытаетесь ли вы также совместно использовать контекст управляемого объекта между потоками.

В этом документе описывается пара обходных путей для передачи управляемых объектов другим потокам.Вам нужно будет реализовать один из них.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...