Подтвердить что ты не робот

Отладка SIGABRT внутри NSManagedObjectContext -save:

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

Утверждение не выполнено: (_Unwind_SjLj_Resume() не может вернуться), функция _Unwind_SjLj_Resume, файл /SourceCache/libunwind/libunwind -24.1/src/Unwind-sjlj.c, строка 326.

Программный сигнал: "SIGABRT".

предупреждение: невозможно прочитать символы для /Developer/Platforms/iPhoneOS.platform/DeviceSupport/4.2.1 (8C148)/Symbols/Developer/usr/lib/libXcodeDebuggerSupport.dylib(файл не найден).

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

alt text

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

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

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

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

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

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

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

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

4b9b3361

Ответ 1

Вам следует попытаться активировать "Запустить > Остановить на Objective-C исключение". Это позволило мне найти место, где был доступ к объекту, превращенному в ошибку, который был основной причиной проблемы.