2009-11-20 10 views
0

J'ai une question de programmation iPhone (je l'espère stupide). J'essaie d'obtenir une chaîne d'un objet que j'ai créé, stocké dans un AppMonDash NSMutableArray - y at-il une raison pour laquelle je reçois toujours une erreur EXC_BAD_ACCESS lorsque j'essaye d'y accéder (via le tableau appdelegates ou la copie de mes contrôleurs) mon NSMutableArray dans la méthode cellForRowAtIndexPath, mais aucun problème dans ma méthode ViewDidLoad? Toutes les pensées ont apprécié!fonctionne dans viewDidLoad mais pas CellForRowAtIndexPath - pourquoi?

Dans ma méthode "viewDidLoad", je le code suivant:

appDelegate = (Social_Cost_TrackerAppDelegate *)[[UIApplication sharedApplication] delegate]; 
    [appDelegate setArray]; 
    myCompanies = appDelegate.companies; 
    NSLog(@"Important Value: %i",[myCompanies count]); 
    Company *c = [myCompanies objectAtIndex:0]; 
    NSString *me = [c cname]; 
    NSLog(@"2nd Val: %@", me); 

Dans mon "cellForRowAtIndexPath" J'ai le code suivant:

NSLog(@"Problem Spot--myCompanies-Size: %i",[myCompanies count]); 
    Company *c = [myCompanies objectAtIndex:0]; 
    NSString *me = [c cname]; 
    NSLog(@"2nd Val: %@", me); 

Cependant, dans la méthode "cellForRowAtIndexPath" , Je reçois l'erreur suivante:

Program received signal: “EXC_BAD_ACCESS”.

Qu'est-ce que je fais mal, pourquoi puis-je obtenir une taille hors de mon tableau, mais pas un objet? Je suis un peu perplexe ici ... Merci pour toutes vos pensées! (P.S. Je ne suis pas un développeur iPhone/Objective-C - juste faire un peu d'apprentissage ici avec un projet parallèle).

Ci-dessous est ma sortie du débogueur: 2009-11-19 18: 42: 57,883 Tracker coût social [688: 207] Valeur Important: 5 2009-11-19 18: 42: 57,883 Tracker coût social [688: 207] 2nd Val: UCBrewers 2009-11-19 18: 42: 57.885 Suivi des coûts sociaux [688: 207] Problème Spot - myCompanies-Size: 5 Signal reçu du programme: "EXC_BAD_ACCESS".

Répondre

0

Vous ne retenez pas votre objet myCompanies lorsque vous l'avez défini pour la première fois, il ne sera donc pas disponible dans votre cellForRowAtIndexPath. Vous devez soit déclarer le tableau myCompanies dans votre tête comme une propriété comme celui-ci:

@property (retain) NSArray* myCompanies; 

puis @sythesize dans le .m avec

@synthesize myCompanies; 

Ou vous devez appeler explicitement conserver dans votre code comme ceci:

appDelegate = (Social_Cost_TrackerAppDelegate *)[[UIApplication sharedApplication] delegate]; 
[appDelegate setArray]; 
myCompanies = [[appDelegate companies] retain]; 
// ... etc. 

dans ce cas, vous devrez également .L'appel lorsque vous avez terminé avec le tableau, très probablement dans le dealloc du contrôleur de vue.

+0

Merci Matt, J'ai ma propriété configurée comme suit, et synthétise myCompanies aussi bien. @property (nonatomic, retain) NSMutableArray * myCompanies; Je l'ai essayé avec juste "retenez" pour voir si cela a fonctionné de façon magique, mais jusqu'ici pas de chance :(J'ai aussi essayé avec retenue dans le fichier .m comme vous l'avez décrit, mais obtenez toujours ce message exc_bad_access. –

+0

Quelle ligne échoue-t-elle dans cellForRowAtIndexPath ?. Que obtenez-vous lorsque vous imprimez tout le contenu du tableau avec NSLog (@ "Contents:% @", myCompanies), dans cellForRowAtIndexPath? –

0

que fait la méthode setArray? Êtes-vous sûr que votre viewDidLoad est appelée avant cellForRowAtIndexPath? vous pouvez essayer d'appeler setArray dans votre classe appDelegate dans l'applicationDidFinishLaunching. ou dans la méthode init de votre classe

Questions connexes