2010-04-02 9 views
7

Ich habe ein anderes Problem in dem gleichen Code bekommt ... Ich erhalte diese Fehlermeldung:Fehler "Erstellen Sie eine konkrete Instanz!"

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

Aber ich verstehe nicht, den Fehler oder was ich tun soll ...

bearbeiten:

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

Wie haben Sie diese Instanz zugeordnet? –

+0

Zeigen Sie Ihren Code. –

Antwort

11

Sie sehen dies, weil NSString ein Klassencluster ist. Eine allgemeine Erläuterung finden Sie in Apples Dokumenten here und here für Hinweise speziell zum Unterklassen-NSString. Im Grunde ist NSString eine abstrakte Klasse ohne Methode zum Speichern von Zeichen, und die verschiedenen -initWith ... -Methoden geben alle verschiedene konkrete Unterklassen von NSString basierend auf der Methode der Initialisierung zurück. Wenn Sie NSString verwenden, ist dies normalerweise völlig transparent. Wenn Sie jedoch NSString ableiten möchten, müssen Sie zumindest die Basismethoden (-length und -characterAtIndex :) sowie alle init-Methoden implementieren, die Sie haben möchten (und natürlich auch die Zeichen der Zeichenfolge speichern können)).

Wenn Sie nur Funktionalität zu NSString hinzufügen möchten, ist Unterklassen in der Regel nicht erforderlich. Zuerst sollten Sie überprüfen, ob eine Kategorie oder eine Funktion, die mit einem NSString arbeitet, oder eine Methode für eine Klasse, die den NSString enthält, besser funktioniert. Siehe beispielsweise RegexKit oder Google Toolbox For Mac, die beide die Unterstützung für reguläre Ausdrücke mithilfe einer Kategorie in NSString implementieren.

+0

Vielen Dank! Mein anderes Problem ist gelöst! (A) Ich konnte etwas wie RegexKit nicht finden ... – dododedodonl

Verwandte Themen