iOS 5: ¿La categoría NSString incluye NSCFConstantString?

Tengo una class de categoría NSString+URLEncoding.h ( NSString+URLEncoding.h ). Me estoy topando y fallo de selector desconocido, porque la cadena a la que estoy llamando el método de categoría se ha optimizado en un NSCFConstantString por iOS.

 -[__NSCFConstantString URLEncodedString]: unrecognized selector sent to instance 0x290174 

Aprendí sobre las optimizaciones NSCFConstantString vs. NSCFString en iOS 5 desde: http://www.cocoanetics.com/2012/03/beware-of-nsstring-optimizations/

¿Alguien sabe cómo puedo hacer que la categoría NSString incluya las cadenas Constantes o incluso forzar que la var sea una NSString/NSCFString y no una NSCFConstantString ?

Saludos, z

-editar-

  • Las banderas de -ObjC -all_load ya están implementadas
  • NSString + URLEncoding.m se incluye en las fonts de compilation de objectives
  • NSString + URLEncoding.m implementa el método URLEncodedString.
  • Comprobado por los zombies.

Estoy agregando un service para compartir ShareKit 2.0

header:

 @interface NSString (OAURLEncodingAdditions) - (NSString *)URLEncodedString; 

implementación:

 @implementation NSString (OAURLEncodingAdditions) - (NSString *)URLEncodedString { NSString *result = (NSString *)CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, (CFStringRef)self, NULL, CFSTR("!*'();:@&=+$,/?%#[]"), kCFStringEncodingUTF8); [result autorelease]; return result; } 

Existe un problema con el linker que puede hacer que su eliminación de código muerto omita por completo cualquier file de object que solo contenga categorías obj-c (o que de otro modo no estén referidos). -ObjC teóricamente la bandera -ObjC al linker debería solucionar esto, pero eso no parece funcionar siempre. Puede -all_load este problema proporcionando el -all_load linker, que hará que el linker siempre se vincule en todos los files object.

Tenga en count que es posible que -all_load configurar -all_load en el proyecto principal si su categoría es parte de un subproyecto o biblioteca que incluye en algún lugar.

Acabo de pasar 30 minutos descubriendo exactamente el mismo problema. Después de jugar con linker, descubrí que la categoría no estaba presente en la list Orígenes de compilation en las Fases de compilation de mi objective. Asegúrate de verificar que esté allí.

__NSCFConstantString es una subclass de NSString , por lo que cualquier categoría en NSString aplica también a __NSCFConstantString .

O no está vinculando su categoría, o su categoría no define un método URLEncodedString en su @implementation .