Я добавил расширение к NSData (расширение base64), которое я сохранил в отдельном проекте библиотеки класса инфраструктуры. Но когда я использую этот метод из своего основного проекта, я получаю сообщение об ошибке, подобное этому: «-[NSConcreteData encodeBase64]: нераспознанный селектор отправлен в экземпляр 0x121e60'».

Но если я оставлю тот же класс в своем основном проекте, это будет выполнено без каких-либо проблем.

Я вызываю этот метод следующим образом: [dev setToken:[token encodeBase64]];

Пожалуйста, предложите, почему это не работает, если я поставлю расширение в другой проект. (Я уже использую некоторые другие расширения, например, для NSDate, как это без каких-либо проблем.)

2
Sreehari 22 Июл 2009 в 14:32

2 ответа

Это на iPhone OS 3.0? SDK 3.0 нарушил использование -ObjC, но обычно вы можете связать категории для статической библиотеки, добавив параметр -all_load к другим флагам компоновщика в вашем целевом приложении.

3
Community 23 Май 2017 в 14:55

Проблема в том, что метаданные, необходимые для настройки категории, обычно удаляются компоновщиком, потому что они кажутся мертвыми. Если вы добавите LDFLAG "-ObjC" в свой проект, он скажет компоновщику связать всю потенциальную информацию ObjC, даже если она кажется мертвой.

0
Louis Gerbarg 22 Июл 2009 в 14:39
Во флагах для приложения или библиотеки?
 – 
Louis Gerbarg
22 Июл 2009 в 15:42
Я добавил как в приложение, так и в библиотеку.
 – 
Sreehari
22 Июл 2009 в 16:30