2010-04-02 13 views
7

Tengo otro problema en el mismo código ... que estoy recibiendo este error:Error "¡Crea una instancia concreta!"

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

Pero yo no entiendo el error o lo que debería hacer ...

editar:

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

¿Cómo asignó esta instancia? –

+0

Muestra tu código. –

Respuesta

11

Estás viendo esto porque NSString es un clúster de clase. Consulte los documentos de Apple here para obtener una explicación general, y here para obtener notas específicamente sobre la subclasificación de NSString. Básicamente, NSString es una clase abstracta sin método de almacenar caracteres, y los diversos métodos -initWith ... devuelven diferentes subclases concretas de NSString en función del método de inicialización. Normalmente, cuando usa NSString, esto es completamente transparente. Sin embargo, si desea subclase NSString, al menos debe implementar los métodos base (-length, y -characterAtIndex :) más cualquier método de inicialización que quiera tener (además, obviamente, tiene una forma de almacenar los caracteres de la cadena)

Si solo desea agregar funcionalidad a NSString, las subclases generalmente no son necesarias. Primero, debe verificar si una categoría, o una función que opera en un NSString, o un método en una clase que contiene el NSString funcionará mejor. Por ejemplo, vea RegexKit o Google Toolbox For Mac, ambos implementan soporte de expresiones regulares usando una categoría en NSString.

+0

¡Muchas gracias! Mi otro problema está resuelto a! (A) No pude encontrar algo como RegexKit ... – dododedodonl

Cuestiones relacionadas