Применяется ли Категория, примененная к NSString, также к NSCFString через «бесплатный мост»? - PullRequest
1 голос
/ 26 апреля 2010

Мы интегрируем библиотеку в приложение для iPhone, которое, похоже, использует внутреннюю панель инструментов Google для iPhone. Панель инструментов Google добавляет метод gtm_stringBySanitizingAndEscapingForXML к NSString. Проблема в том, что всякий раз, когда мы пытаемся позвонить в эту библиотеку, мы получаем

[NSCFString gtm_stringBySanitizingAndEscapingForXML]: unrecognized selector sent to instance 0x272478

Так что, похоже, библиотека вызывает этот метод для NSCFString, к которой категория не относится. Итак ... это тот случай, когда категория не будет применяться по бесплатному мосту к классам CoreFoundation? Если это так, то мы, по крайней мере, знаем, почему он взрывается. Выяснить, как это исправить - это другое дело.

Ответы [ 3 ]

2 голосов
/ 29 июля 2011

NSCFString класс не является подклассом NSMutableString ... Это просто еще один класс NSString кластера. Так что если у вас есть NSCFString foo var и вы тестируете это:

BOOL isNSString = [foo isKindObClass:[NSString class]];

Вы получите, что isNSString равно NO.

У меня возникают некоторые проблемы, потому что я создал категорию NSString, и я не знаю, как применять новые методы, когда класс является NSCFString или любым другим классом из этого кластера ...


EDIT: Хорошо, я нашел решение. Хотя эти тесты вернули NO:

[myString isKindOfClass:[NSString class]];
[myString respondsToSelector:@selector(myNSStringCategorySelector:)];

Я принудительно выполнил метод для класса NSCFString, и он работал правильно !!

Надеюсь, это кому-нибудь поможет!

2 голосов
/ 26 апреля 2010

Категории, примененные к NSString, также применимы к NSCFString, поскольку NSCFString является подклассом NSMutableString, который является подклассом NSString.

Но вы действительно включили библиотеку Google Toolbox (GTMNSString+XML.m)?

0 голосов
/ 16 января 2013

Похоже, что реализация этой категории не связана с вашей программой. Предполагая, что ваша библиотека скомпилирована как статическая библиотека, вам может понадобиться добавить флаг компоновщика -ObjC в ваш проект. Для получения дополнительной информации посмотрите этот technote . Упомянутая там ошибка компоновщика должна быть исправлена ​​в последнем выпуске Xcode.

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