J'ai le code suivant qui génère cette erreur. Je ne peux pas comprendre pourquoi le message subarrayWithRange est envoyé à une chaîne? Quand c'est clairement un tableau?Sélecteur non reconnu envoyé à l'instance [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]);
}
Erreur:
-[NSCFString subarrayWithRange:]: unrecognized selector sent to instance 0x6b071a0
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: [NSCFString subarrayWithRange:]:
Merci
Après la création, 'temp' est un tableau de 80 chaînes, infobulle de débogage montre seulement 10 articles mais pas sûr que ce soit juste Xcode ou non? Vous avez corrigé keysArray est une variable d'instance dans mon App Delegate, une propriété définie comme (non atomic, retain), puis synthétisée et affectée à l'aide d'une méthode pratique 'arrayWithContentsOfFile'. Je n'ai pas besoin de le conserver manuellement, n'est-ce pas? – joec
Oui. Vous ne l'avez pas créé, la méthode pratique l'a fait. Par conséquent, si vous voulez qu'il reste après sa création, vous devez implémenter une réclamation en conservant (ou en créer une copie). Jetez un autre regard sur les règles de gestion de la mémoire. –
Si vous utilisez l'accesseur de propriété au lieu d'assigner, vous n'aurez pas besoin de retenir; ou, vous pouvez appeler '[[NSArray alloc] initWithContentsOfFile: @" un chemin "]' à la place. – jlehr