Tengo el siguiente código que produce este error. No puedo entender por qué el mensaje subarrayWithRange se está enviando a una cadena? Cuando es claramente una matriz?Selector no reconocido enviado a la instancia [NSCFString subarrayWithRange:]
static const int kItemsPerView = 20;
NSRange rangeForView = NSMakeRange(page * kItemsPerView, kItemsPerView);
NSMutableArray *temp = [[APP_DELEGATE keysArray] mutableCopyWithZone:NULL];
NSArray *itemsForView = [temp subarrayWithRange:rangeForView];
for (int loopCounter = 0;loopCounter < r*c;loopCounter++){
NSLog(@"%i: %@ ", loopCounter, [itemsForView objectAtIndex:loopCounter]);
}
error:
-[NSCFString subarrayWithRange:]: unrecognized selector sent to instance 0x6b071a0
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: [NSCFString subarrayWithRange:]:
Gracias
Después de la creación, 'temp' es una matriz de 80 cuerdas, información sobre herramientas de depuración sólo muestra 10 artículos aunque no estoy seguro si eso es sólo Xcode o no? Estás en las teclas correctas. Array es una variable de instancia en mi delegado de aplicaciones, una propiedad definida como (no atómica, retener) y luego sintetizada y asignada mediante el método de conveniencia 'arrayWithContentsOfFile'. No necesito retenerlo manualmente, ¿verdad? – joec
Sí. No lo creaste, el método de conveniencia lo hizo. Por lo tanto, si desea que se quede después de que se creó, debe replantear un reclamo reteniendo (o crear una copia propia). Eche otro vistazo a las reglas de administración de memoria. –
Si usa el descriptor de acceso a la propiedad en lugar de asignarlo, entonces no necesitará retenerlo; o bien, puede llamar a '[[NSArray alloc] initWithContentsOfFile: @" somepath "]' en su lugar. – jlehr