Ошибка "Создать конкретный экземпляр!" - PullRequest
7 голосов
/ 03 апреля 2010

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

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

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

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

NSString *pageContent = [[NSString alloc] initWithData:pageContents encoding:NSASCIIStringEncoding];
NSString_RegEx *pContent = [[NSString_RegEx alloc] initWithString: pageContent];

1 Ответ

13 голосов
/ 03 апреля 2010

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

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

...