2010-04-02 3 views
7

У меня есть еще одна проблема в том же коде ... Я получаю эту ошибку:Ошибка «Создайте конкретный экземпляр!».

initialization method -initWithCharactersNoCopy:length:freeWhenDone: cannot be sent to an abstract object of class NSString_RegEx: Create a concrete instance!

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

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

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

HOw Вы выделили этот экземпляр? –

+0

Показать свой код. –

ответ

11

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

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

+0

Спасибо большое! Моя другая проблема решена! (A) Я не мог найти что-то вроде RegexKit ... – dododedodonl