Errore di “Creare un concreto esempio!”
-
24-09-2019 - |
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];
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.