9

同じコードに別の問題があります...次のエラーが表示されます:

初期化メソッド -initWithCharactersNoCopy:length:freeWhenDone: クラス NSString_RegEx の抽象オブジェクトに送信できません: 具体的なインスタンスを作成してください!

しかし、私はエラーや私が何をすべきかを理解していません...

編集:

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

1 に答える 1

15

これが表示されるのは、NSString がクラス クラスターであるためです。一般的な説明についてはApple のドキュメントを参照してください。NSString のサブクラス化に関する注意事項については、こちらを参照してください。基本的に、NSString は文字を格納するメソッドを持たない抽象クラスであり、さまざまな -initWith… メソッドはすべて、初期化のメソッドに基づいて NSString のさまざまな具象サブクラスを返します。通常、NSString を使用している場合、これは完全に透過的です。ただし、NSString をサブクラス化したい場合は、少なくとも基本メソッド (-length および -characterAtIndex:) に加えて、必要な init メソッドを実装する必要があります (さらに、明らかに、文字列の文字を格納する方法が必要です)。 )。

NSString に機能を追加するだけの場合、通常、サブクラス化は必要ありません。最初に、カテゴリ、NSString で動作する関数、または NSString を含むクラスのメソッドが適切に機能するかどうかを確認する必要があります。たとえば、RegexKitまたはGoogle Toolbox For Macを参照してください。どちらも NSString のカテゴリを使用して正規表現サポートを実装しています。

于 2010-04-03T16:49:18.457 に答える