Non reconnu Sélecteur Envoyé à l'Instance [NSCFString subarrayWithRange:]
J'ai le code suivant qui est de la production de cette erreur. Je ne comprends pas pourquoi le subarrayWithRange le message est envoyé à une chaîne de caractères? Quand il s'agit clairement d'un tableau?
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:]:
Grâce
OriginalL'auteur joec | 2010-10-04
Vous devez vous connecter pour publier un commentaire.
Ces types d'erreurs sont généralement de gestion de la mémoire. Essentiellement, vous envoyez un message électronique à une adresse qui est maintenant occupé par un autre objet, parce que l'occupant précédent a disparu de façon inattendue. Depuis que l'adresse de l'espace peut être occupé par quelque chose, vous venez d'arriver à poser un NSCFString quelque chose à laquelle il ne répond pas.
Si vous placez le débogueur à droite après la création de la temp tableau, que voyez-vous affecté à temp? Je devine que quelque chose ne va pas avec ce que l'-keysArray retourne. Vous pourriez vouloir vérifier comment la mémoire est gérée dans tout ce qui est censé y retourner. Par le nom, je suppose que votre délégué d'application a un tableau appelé "keysArray" comme une variable d'instance. Peut-être que ce n'est pas être correctement conservées au moment de sa création ou affectés?
temp
est un tableau de 80 chaînes, debug info-bulle affiche seulement 10 points si vous ne savez Pas si c'est juste Xcode ou pas? Vous avez raison keysArray est une variable d'instance de mon Application Délégué, une propriété définie comme (nonatomic, retain) et ensuite synthétisés et affectées à l'aide d'une méthode pratiquearrayWithContentsOfFile
. Je n'ai pas besoin de le conserver, il manuellement, puis-je?Oui. Vous n'avez pas le créer, la méthode de convenance n'. Par conséquent, si vous voulez rester dans les parages après il est créé, vous avez besoin de revendiquer un droit par le maintien (ou de créer une copie de votre propre). Prendre un autre regard sur la gestion de la mémoire règles.
Si vous utilisez la propriété accesseur au lieu de les affecter, vous n'avez pas besoin de conserver; ou, vous pouvez appeler
[[NSArray alloc] initWithContentsOfFile:@"somepath"]
à la place.Vrai, mais je pense que c'est important de savoir ce qu'il se passe derrière les convenances Objective-C 2 apporte (@property, @synthétiser, etc.). En fait, pour le rendre efficace l'utilisation de @déclarations de propriété dans un non-garbage collector de l'environnement, vous devez savoir autant sur le Cacao de gestion de la mémoire.
le problème a été résolu par le changement "assigner" à "fort"
OriginalL'auteur Joshua Nozzi
J'ai donc eu cette. J'ai fait quelque chose de stupide. Je lui ai donné la UITextView à une chaîne, au lieu de sa propriété text. c'est à dire:
au lieu de:
OriginalL'auteur Jeff