Вопрос

У меня другая проблема с тем же кодом ... Я получаю эту ошибку:

<цитата>

метод инициализации -initWithCharactersNoCopy: length: freeWhenDone: нельзя отправить абстрактному объекту класса NSString_RegEx: создайте конкретный экземпляр!

Но я не понимаю ошибку или что мне делать ...

редактировать:

родовое слово
Это было полезно?

Решение

Вы видите это, потому что NSString - это кластер классов. См. Документацию Apple здесь для общего объяснения и здесь , где можно найти примечания, касающиеся создания подклассов NSString. По сути, NSString - это абстрактный класс без метода хранения символов, а все различные методы -initWith… возвращают различные конкретные подклассы NSString в зависимости от метода инициализации. Обычно, когда вы используете NSString, это полностью прозрачно. Однако, если вы хотите создать подкласс NSString, вы должны как минимум реализовать базовые методы (-length и -characterAtIndex :) плюс любые методы инициализации, которые вы хотите иметь (плюс, очевидно, иметь способ хранения символов строки ).

Если вы просто хотите добавить функциональность к NSString, создание подклассов обычно не требуется. Во-первых, вы должны проверить, будет ли лучше работать категория, функция, работающая с NSString, или метод класса, который содержит NSString. Например, см. RegexKit или Google Toolbox для Mac , оба из которых реализуют поддержку регулярных выражений с использованием категории в NSString.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top