Отладка SIGABRT в NSManagedObjectContext -save:

изнутри NSManagedObjectContext -save: я получаю это сообщение:

Assertion failed: (_Unwind_SjLj_Resume (_Unwind_SjLj) cannot return ), функция _Unwind_SjLj_Resume, файл /SourceCache/libunwind/libunwind-24.1/src/Unwind-sjlj. /Developer/Platforms/iPhoneOS.platform/DeviceSupport/4.2.1 (8C148) /Symbols/Developer/usr/lib/libXcodeDebuggerSupport.dylib (файл не найден.)

Это происходит, когда я удаляю объект Experiment с to-many с помощью Run, который имеет to-many с Sample, который имеет to-one с Data. Эксперимент также имеет ко многим со страницей, у которых есть ко многим с дисплеем, у которых есть ко многим для выполнения. Я упоминаю об этом, чтобы указать на циклический характер графика. Вот упрощенный график модели:

alt text

Эксперимент - объект верхнего уровня, с которым взаимодействует пользователь. Эксперимент содержит несколько объектов Run. Прогон - это набор данных, начинающийся в определенное время и заканчивающийся в более позднее время. Поскольку данные могут быть собраны из нескольких источников одновременно, для каждого источника существует образец для каждого прогона. Эксперимент содержит данные, и эти данные необходимо просматривать и с ними взаимодействовать. Итак, каждый эксперимент имеет некоторое количество объектов страницы, и каждая страница содержит некоторое количество дисплеев (например, графиков, метров). Дисплей настроен для отображения некоторого подмножества прогонов, принадлежащих эксперименту. Таким образом, хотя эксперимент может содержать десятки запусков, на одной из его страниц одновременно отображается только несколько из этих запусков. Сущность Display поддерживает этот список. Дисплей - это , а не представление. Представление будет ссылаться на объект Display и получать уведомления об изменениях в объекте Display.

Я использовал правила удаления, но теперь переключился на правила удаления «без действия» в сочетании с методами -prepareForDeletion для всех этих классов. Это изменение не имело значения. В обоих случаях сообщение об ошибке одно и то же.

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

Кроме того, если эксперимент не имеет объектов Run, то удаление работает без инцидентов. В этом отношении, также работает удаление одного прогона из эксперимента.

Я надеюсь, что кто-то видел что-то подобное и может предложить совет, что могло бы это вызвать. Или, если у кого-то есть совет о том, как получить libXcodeDebuggerSupport.dylib для iOS 4.2.1, это также может быть полезно.

Обновление: Я последовал совету, найденному здесь , и смог получить Xcode найти libXcodeDebuggerSupport.dylib для iOS 4.2.1. Но это совсем не помогло в диагностике проблемы, которая сохраняется.

Обновление 2: После небольшого прочтения и загрузки версии unwind-sjlj.c мне кажется, что я имею дело с чем-то вроде неперехваченного исключения . Не знаю, как это мне помогает ...

Обновление 3: Благодаря Камчатке, я сделал кое-что, что, вероятно, должен был сделать несколько дней назад: включил "Остановить при исключениях Objective-C". Это позволило мне увидеть, что ссылка на удаленный объект все еще сохраняется - и, что еще хуже, это ключ-значение, наблюдающее за удаленным объектом. Исправив эту исправленную проблему, я смог вернуться к использованию правил удаления, а не методов -prepareForDeletion.

13
задан Community 23 May 2017 в 10:30
поделиться