2010-04-02 111 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

你是否分配了這個實例? – 2010-04-02 21:35:02

+0

顯示您的代碼。 – 2010-04-03 02:57:36

回答

11

你看到了這一點,因爲NSString是一個類集羣。有關一般說明,請參閱Apple的文檔here,關於子類化NSString的說明請參見here。基本上,NSString是一個沒有存儲字符方法的抽象類,各種-initWith ...方法都基於初始化方法返回不同的NSString的具體子類。通常,當你使用NSString時,這是完全透明的。然而,如果你想要NSString的子類,你必須至少實現基本方法(-length和-characterAtIndex :)加上你想要的任何init方法(顯然,還有一種方法來存儲字符串的字符)。

如果您只是想將功能添加到NSString中,通常不需要子類。首先,你應該檢查一個類或NSString上運行的函數,或者一個包含NSString的類的方法是否會更好。例如,請參閱RegexKitGoogle Toolbox For Mac,它們都使用NSString上的類別實現正則表達式支持。

+0

非常感謝!我的其他問題解決了! (A)我找不到像RegexKit ... – dododedodonl 2010-04-03 18:34:46