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