Domanda

Ne ho un altro problema con lo stesso codice...Ricevo questo errore:

metodo di inizializzazione -initWithCharactersNoCopy:lunghezza:freeWhenDone:non può essere inviato a un oggetto astratto di classe NSString_RegEx:Creare un concreto esempio!

Ma non capisco l'errore o cosa dovrei fare...

edit:

NSString *pageContent = [[NSString alloc] initWithData:pageContents encoding:NSASCIIStringEncoding];
NSString_RegEx *pContent = [[NSString_RegEx alloc] initWithString: pageContent];
È stato utile?

Soluzione

Stai vedendo questo perché NSString è una classe di cluster.Vedere di Apple docs qui per una spiegazione generale, e qui per le note in particolare sulla creazione di sottoclassi NSString.Fondamentalmente, NSString è una classe astratta con nessun metodo di memorizzazione dei caratteri, e vari -initWith... metodi di ritorno concrete diverse sottoclassi di NSString in base al metodo di inizializzazione.Normalmente, quando si utilizza NSString, questo è completamente trasparente.Tuttavia, se si desidera creare una sottoclasse NSString, devi almeno implementare i metodi di base (lunghezza, e -characterAtIndex:) più eventuali init metodi che si desidera avere (più, ovviamente, hanno un modo di memorizzare i caratteri della stringa).

Se si desidera aggiungere funzionalità di NSString, la creazione di sottoclassi non è di solito necessario.Primo, si dovrebbe verificare se una categoria, o una funzione che operano su una NSString, o un metodo di una classe che contiene il NSString funzionerà meglio.Per esempio, vedere RegexKit o Google Toolbox For Mac, entrambi i quali implementare il supporto alle espressioni regolari, utilizzando una categoria NSString.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top