“Неизвестный класс <MyClass> по Интерфейсной ошибке” файла Разработчика во времени выполнения

Я рекомендую, чтобы компонент ориентировался Калитка платформа. Это позволяет Вам писать свое веб-приложение в простом коде Java, Вы можете использовать POJOs в качестве модели для всех компонентов и не должны бездельничать с огромными конфигурационными XML-файлами.

я успешно разработал заявление на дистанционное банковское обслуживание с Struts, когда я обнаружил Калитку и видел, как легкая разработка веб-приложения может быть!

259
задан jhoule 12 November 2009 в 12:38
поделиться

2 ответа

Несмотря на ошибку « Неизвестный класс MyClass в файле Interface Builder. », выводимую во время выполнения, эта проблема не имеет ничего общего с Interface Builder, а скорее с компоновщик, который не связывает класс, потому что никакой код не использует его напрямую.

Когда данные .nib (скомпилированные из .xib) загружаются во время выполнения, MyClass ссылается на строку, но компоновщик не анализирует функциональность кода, а только наличие кода, поэтому он этого не знает. Поскольку никакие другие исходные файлы не ссылаются на этот класс, компоновщик оптимизирует его отсутствие при создании исполняемого файла. Итак, когда Apple s код пытается загрузить такой класс, он не может найти связанный с ним код и выводит предупреждение.

По умолчанию цели Objective-C будут иметь флаги -all_load -ObjC , установленные default, в котором сохранятся все символы. Но я начал с цели C ++, и у меня ее не было. Тем не менее, я нашел способ обойти это, что делает компоновщик агрессивным.

Изначально я использовал хакер, чтобы добавить пустую статическую процедуру вроде:

+(void)_keepAtLinkTime;

, которая ничего не делает, но которую я бы вызвал один раз, например:

int main( int argc, char** argv )
{
   [MyClass _keepAtLinkTime];
   // Your code.
}

Это заставит компоновщик сохранить весь класс, и ошибка исчезнет.

Как jlstrecker указал в комментариях, нам действительно не нужно добавлять метод ​​_keepAtLinkTime . Достаточно просто вызвать существующий объект, например:

   [MyClass class];

(если вы производный от NSObject ).

Конечно, вы можете вызвать это в любом месте вашего кода. Я предполагаю, что это могло быть даже в недоступном коде. Идея состоит в том, чтобы обмануть компоновщика, заставив его думать, что где-то используется MyClass , чтобы он не был столь агрессивен в его оптимизации.

Xcode 6.3.2 и Swift 1.2

Быстрое определение представления . Обязательно переопределите init (кодер aDecoder: NSCoder) . Objective-C определение контроллера представления. И перо в грушевом дереве.

Добавьте имя модуля в инспектор деталей перьев, где вы выбираете свой класс.

Обязательно переопределите init (кодер aDecoder: NSCoder) . Objective-C определение контроллера представления. И перо в грушевом дереве.

Добавьте имя модуля в инспектор деталей перьев, где вы выбираете свой класс.

Обязательно переопределите init (кодер aDecoder: NSCoder) . Objective-C определение контроллера представления. И перо в грушевом дереве.

Добавьте имя модуля в инспектор деталей перьев, где вы выбираете свой класс.

219
ответ дан 23 November 2019 в 02:37
поделиться

Не только в настройках проекта, но и в настройках Target нужно добавить -all_load -ObjC flags...

Core-Plot: Unknown class CPLayerHostingView in Interface Builder file

4
ответ дан 23 November 2019 в 02:37
поделиться