我在同一个代码中遇到了另一个问题...... 我收到了这个错误:
初始化方法-initWithCharactersNoCopy:length:freeWhenDone:无法发送到类NSString_RegEx的抽象对象:创建具体实例!
但我不明白错误或我应该做什么......
编辑:
NSString *pageContent = [[NSString alloc] initWithData:pageContents encoding:NSASCIIStringEncoding];
NSString_RegEx *pContent = [[NSString_RegEx alloc] initWithString: pageContent];
答案 0 :(得分:12)
你看到了这个,因为NSString是一个类集群。有关一般解释,请参阅Apple的文档here,有关特别是有关子类化NSString的注释,请参阅here。基本上,NSString是一个抽象类,没有存储字符的方法,各种-initWith ...方法都基于初始化方法返回NSString的不同具体子类。通常,当您使用NSString时,这是完全透明的。但是,如果你想要子类NSString,你必须至少实现基本方法(-length,和-characterAtIndex :)加上你想要的任何init方法(显然,有一种方法可以存储字符串的字符) )。
如果您只想为NSString添加功能,通常不需要子类化。首先,您应该检查在NSString上运行的类别或函数,或者包含NSString的类上的方法是否会更好。例如,请参阅RegexKit或Google Toolbox For Mac,两者都使用NSString上的类别实现正则表达式支持。