2010-11-24 8 views
0

Je suis totalement nouveau sur Mac OS et iPhone et j'écris une petite application. J'ai un tableau constant de noms d'image dans la ressource et je veux basculer entre ces éléments. Je veux afficher l'image par le nom qui est dans le tableau (comme montré ci-dessous). Cependant obtenir la chaîne de nom de l'image à partir de certains index dans le tableau semble causer 3 erreurs différentes en fonction de .. eh bien je ne sais pas sur quoi. Chaque fois que je lance une application avec un nouveau simulateur, cela provoque l'une des trois erreurs.Xcode Objective-C article NSArray - erreur ou application fermer

Les matériaux en ligne montrent juste 1) font le tableau 2) ajoutent des articles 3) utilisent objectAtIndex, mais cela ne fonctionne pas pour moi ici. Impossible d'attribuer une chaîne de NSArray à Array.

Dans le fichier d'en-tête, à l'intérieur @interface:

NSMutableArray *imgList; 

dans le code:

imgList = [NSMutableArray arrayWithObjects:@"image01.jpg", @"image02.jpg", @"image03.jpg", nil]; 
NSString *item; 
item = [imgList objectAtIndex:1]; 
label.text = item 

programme a au hasard 3 résultats différents pour cela:

  • une fois la console ne montre aucun problème, mais après quelques appels de fonction app ferme juste
  • autre ti me Label.text affiche "ca.lproj" - aucune idée pourquoi, il ne fait pas partie du tableau
  • autre temps, il est une erreur de la console:

2010-11-24 11: 43: 15,627 Utility [410: 207 ] - [NSCFString objectAtIndex:]: sélecteur non reconnu envoyé à l'instance 0x5f44ba0 2010-11-24 11: 43: 15.630 Utilitaire [410: 207] ** Fin de l'application en raison d'une exception non interceptée 'NSInvalidArgumentException', raison: '- [NSCFString objectAtIndex :]: sélecteur non reconnu envoyé à l'instance 0x5f44ba0' * pile d'appel au premier jet: ( ... ) Mettre fin à appelé après lancer une instance de 'NSException'

Répondre

0

Sans voir un peu plus de votre code, c'est un peu difficile à dire, mais il semble que vous ayez oublié de conserver votre tableau. Une fois que l'autoreleasepool a coché, vous perdez le tableau et imgList devient un pointeur qui pend; et la mémoire conservée par le tableau est écrasée par une chaîne.

Modifier [arrayWithObjects:] à [[alloc] initWithObjects:] devrait résoudre votre problème; comme devrait ajouter un retain; mais il est généralement plus clair ce que vous faites si vous utilisez les méthodes d'allocation appropriées à la place.

+0

Merci, retenez résolu le problème. J'étais sûr d'avoir déjà essayé, je suppose que j'avais tort. – yosh