Я пролистал здесь вопросы на ТАК, ища какие-либо намеки на то, почему я вижу это поведение, и пока ничего.
Рассмотрим класс (фактически два класса, демонстрирующие одну и ту же проблему), встроенный в статическую библиотеку, обернутый в пакет фреймворка ( используемых шагов ). Они наследуются от базовых фреймворков кластеров классов (NSMutableDictionary
и NSMutableArray
).
Использование этих классов основано на том, что некоторые статические переменные инициализируются до того, как статическая функция ( не метод класса! ) используется для выделения и инициализации экземпляра (что-то вроде вспомогательной функции фабрики, я полагаю?) .
Когда проект приложения iOS связывается с этой платформой, существует разница в загрузке классов среды выполнения Objective-C между симулятором и устройством.
В частности, на устройстве (iPhone 4, iOS 4.3.3), когда приложение загружено, эти классы не получают сообщение +load
, и статические переменные не инициализируются, поэтому статический метод фабрики завершается ошибкой. На симуляторе сообщения отправляются, и все работает как задумано. Может ли это быть проблема с временем выполнения устройства, имеющего
У меня вопрос, может ли мой фреймворк быть настроен по-другому, чтобы гарантировать отправку сообщений +load
? Или я столкнулся с ошибкой при загрузке статического класса библиотеки / фреймворка в iOS?
Классы из библиотеки JSONKit (JKArray
, JKDictionary
).
Пример проекта, который иллюстрирует эту проблему, здесь - https://github.com/ohhorob/JSONKit-in-framework-demo
РЕДАКТИРОВАТЬ: Согласно предложению @bbum, я проверил, что классы JKDictionary
и JKArray
фактически загружены и доступны во время работы приложения. Ветвь DeviceBroken
в проекте GitHub обновляется с использованием используемой проверки.
Я отправил отчет об ошибке (# 9461567) в Apple.