2010-04-02 12 views
7

Ho un altro problema nel codice stesso ... sto ottenendo questo errore:Errore "Creare un'istanza concreta!"

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

Ma non capisco l'errore o che cosa devo fare ...

edit:

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

HO hai assegnato questa istanza? –

+0

Mostra il tuo codice. –

risposta

11

Stai vedendo questo perché NSString è un cluster di classe. Vedere i documenti di Apple here per una spiegazione generale e here per le note specifiche sulla sottoclasse di NSString. Fondamentalmente, NSString è una classe astratta senza alcun metodo di memorizzazione dei caratteri, e i vari metodi -initWith ... restituiscono diverse sottoclassi concrete di NSString basate sul metodo di inizializzazione. Normalmente, quando si utilizza NSString, questo è completamente trasparente. Tuttavia, se vuoi creare sottoclassi NSString, devi almeno implementare i metodi di base (-length e -characterAtIndex :) più eventuali metodi di init che vuoi avere (e, ovviamente, avere un modo di memorizzare i caratteri della stringa).

Se si desidera semplicemente aggiungere funzionalità a NSString, la sottoclasse di solito non è necessaria. Innanzitutto, dovresti controllare se una categoria, o una funzione che opera su una NSString, o un metodo su una classe che contiene la NSString funzionerà meglio. Ad esempio, vedere RegexKit o Google Toolbox For Mac, entrambi implementano il supporto per le espressioni regolari utilizzando una categoria su NSString.

+0

Grazie mille! Il mio altro problema è risolto! (A) Non sono riuscito a trovare qualcosa come RegexKit ... – dododedodonl

Problemi correlati