Frage

Ich habe ein anderes Problem in dem gleichen Code bekommt ... Ich erhalte diese Fehlermeldung:

  

Initialisierungsmethode -initWithCharactersNoCopy: Länge: freeWhenDone: kann nicht auf ein abstraktes Objekt der Klasse NSString_RegEx gesendet werden: Erstellen Sie eine konkrete Instanz

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

edit:

NSString *pageContent = [[NSString alloc] initWithData:pageContents encoding:NSASCIIStringEncoding];
NSString_RegEx *pContent = [[NSString_RegEx alloc] initWithString: pageContent];
War es hilfreich?

Lösung

Du siehst das, weil NSString ein Klasse-Cluster ist. Siehe Apples docs hier für eine allgemeine Erklärung, und hier für Notizen speziell auf NSString Subklassen. Grundsätzlich NSString ist eine abstrakte Klasse ohne Verfahren von Zeichen zu speichern, und die verschiedene -initWith ... Methoden aller Rückgabe verschiedene konkrete Subklassen von NSString basierend auf der Methode der Initialisierung. Normalerweise, wenn Sie NSString verwenden, das ist völlig transparent. Allerdings, wenn Sie wollen NSString Unterklasse, haben Sie zumindest die Basismethoden implementieren (-länge und -characterAtIndex :) plus alle init Methoden, die Sie haben wollen (plus, natürlich haben, eine Möglichkeit, die Zeichen der Zeichenfolge des Speicherns ).

Wenn Sie nur Funktionalität zu NSString hinzufügen möchten, ist Subclassing der Regel nicht notwendig. Zunächst sollten Sie, wenn eine Kategorie überprüfen, oder eine Funktion Betriebs auf einem NSString oder ein Verfahren auf einer Klasse, die die NSString enthält besser funktionieren wird. Zum Beispiel finden Sie unter RegexKit oder Google-Toolbox für Mac , die beide die Unterstützung von regulären Ausdrücken einer Kategorie NSString implementieren werden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top