2010-04-02 24 views
7

Mam inny problem w tym samym kodzie ... Dostaję taki błąd:Błąd "Utwórz konkretną instancję!"

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

Ale ja nie rozumiem błąd lub co mam zrobić ...

edit:

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

Czy przydzieliłeś tę instancję? –

+0

Pokaż swój kod. –

Odpowiedz

11

widzisz tego powodu NSString jest klaster klasa. Zobacz dokumentację Apple here, aby uzyskać ogólne wyjaśnienie, i here dla notatek dotyczących podklasy NSString. Zasadniczo NSString jest klasą abstrakcyjną bez metody przechowywania znaków, a różne metody -initWith ... zwracają różne konkretne podklasy NSString w oparciu o metodę inicjalizacji. Zwykle, gdy używasz NSString, jest to całkowicie przezroczyste. Jeśli jednak chcesz podklasę NSString, musisz przynajmniej zaimplementować podstawowe metody (-length i -characterAtIndex :) oraz wszelkie metody init, które chcesz mieć (plus, oczywiście, mieć sposób przechowywania znaków ciągu).

Jeśli chcesz tylko dodać funkcjonalność do NSString, zazwyczaj nie jest konieczne tworzenie podklas. Najpierw powinieneś sprawdzić, czy kategoria lub funkcja działająca na NSString, czy metoda na klasie, która zawiera NSString, będzie działała lepiej. Na przykład zobacz RegexKit lub Google Toolbox For Mac, z których oba implementują obsługę wyrażeń regularnych, używając kategorii na NSString.

+0

Wielkie dzięki! Mój inny problem został rozwiązany! (A) Nie mogłem znaleźć czegoś takiego jak RegexKit ... – dododedodonl

Powiązane problemy