iOS NSKeyedUnarchiver Ошибка при использовании статических библиотек - PullRequest
4 голосов
/ 19 сентября 2010

Я создал собственную статическую библиотеку, которую я использую в проекте iOS.Когда я использую NSKeyedUnarchiver для разархивирования данных.Выдает исключение, когда я пытаюсь использовать его в библиотеке.Я попытался скопировать классы моей статической библиотеки в свой проект, чтобы посмотреть, сработает ли это, и это решит проблему, но, очевидно, не решит задачу статической библиотеки.Я также попробовал несколько комбинаций release / debug и simulator / device и все еще не работает.

Не удается ли NSKeyedUnarchiver найти классы для разархивирования?

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

Ответы [ 2 ]

5 голосов
/ 27 сентября 2010

Попробуйте добавить эти опции в свои флаги компоновщика: -ObjC -all_load

1 голос
/ 26 сентября 2010

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

Прежде всего, проблема заключается в том, что информация о классе не 't полностью доступна для системы времени выполнения, следовательно, ошибка.

Ergo, статическая библиотека либо не содержит необходимой информации, либо компоновщик не передает эту информацию.В последнем случае вы будете тостом, если не найдете дополнительные параметры компоновщика, которые включают такую ​​функцию.Следовательно, прочитайте руководство по компоновщику, чтобы увидеть, есть ли связанные опции.

В первом случае вы могли сначала посмотреть на экспортированные символы с помощью инструмента (я полагаю, что "nm" может сделать это), чтобы убедиться, чтоИмя класса и описание его структуры является частью символов в lib.Я не знаю, как это должно выглядеть, но, возможно, Google помогает.

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

Удачи!

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