Отказ iOS, вызывающий откат на NSManagedObjectContext после выхода из фона - PullRequest
1 голос
/ 19 января 2011

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

Мое приложение настроено на отслеживание местоположения устройства, когда оно активно и в фоновом режиме, и я использую CoreData для создания и сохранения данных трека.Основной сущностью CoreData является «Маршрут», который имеет много сущностей «RoutePoint».Когда устройство получает новое местоположение из приложения CLLocationManager, новый объект RoutePoint добавляется к его родительскому маршруту.

Когда пользователь прекращает отслеживание, у него появляется возможность сохранить или отменить маршрут.Отказ от маршрута просто вызывает [_moc rollback], и, конечно, save будет вызывать [_moc save].Я использую метод ссылки на мой экземпляр NSManagedObjectContext на AppDelegate, а не на одноэлементный объект, который не сохраняется и не выпускается ни в одном из моих UIViewControllers.

Проблема возникает, если пользователь отправляет приложение в фоновый режим, когда отслеживание активно (таким образом, сущности Route и RoutePoint фактически не сохраняются в _moc).Когда приложение возвращается в активное состояние, пользователь останавливает выбранный маршрут, чтобы отменить его, когда происходит сбой приложения (вызывая «откат»).Однако, если тот же процесс повторяется, но пользователь сохраняет маршрут, а не отбрасывает его, сбоя не происходит, и он успешно сохраняется.Ха?!

Единственное, что я получаю в gdb, когда это происходит, это EXC_BAD_ACCESS, поэтому я делаю обратный ход, и вот результат:[_moc rollback], но я провел обширный поиск и пробовал разные вещи, даже сохранил и выпустил свой экземпляр MOC в этом UIViewController, но пока ничего не получалось.Очевидно, что что-то идет не так, когда приложение переходит в фоновый режим, но это было связано с MOC, тогда не произойдет ли аналогичный сбой и при сохранении?

Предложения приветствуются!:)

1 Ответ

1 голос
/ 02 сентября 2011

У меня всегда был флаг на моих предметах, и я выполнял сохранение в willResignActive для всех «неподтвержденных» элементов, имеющих flag = true. Затем, когда я возобновляю (или запускаю), если хочу удалить их, я могу удалить, где flag = true, и стереть их ... таким образом я все еще могу сохранить или отменить, даже если iOS закрывает мое приложение из-за нехватки памяти.

IIRC Ваш текущий дизайн означает, что если кто-то открывает Safari и т. Д., А ваше приложение закрывается, маршрут навсегда исчезнет, ​​даже если пользователь захочет вернуться и сохранить его, потому что изменения были только в памяти.

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