J'ai un NSMutableArray défini dans ma classe AppDelegate:Pourquoi ma variable est-elle hors de portée?
NSMutableArray *devices;
Je remplir le tableau d'une classe dans la méthode didFinishLaunchingWithOptions:
Devices *devs = [[Devices alloc] init];
self.devices = [devs getDevices];
La méthode getDevices contenant une chaîne JSON et crée un objet périphérique , en l'ajoutant au tableau:
NSMutableArray *retDevices = [[NSMutableArray alloc] initWithCapacity:[jsonDevices count]];
for (NSDiectionary *s in jsonDevices) {
Device *newDevice = [[Device alloc] init];
device.deviceName = [s objectForKey:@"name"];
[retDevices addObject: newDevice];
}
return retDevices;
Puis j'utilise le tableau devices de la classe AppDelegate pour remplir une table Vue. Comme on le voit dans la méthode cellForRowAtIndexPath:
AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
Device *d = (Device *)[appDelegate.devices objectAtIndex:indexPath.row];
cell.label.text = d.deviceName;
Lorsque le tableview est peuplé d'abord, il fonctionne. Mais lorsque je fais défiler la liste et que cellForRowAtIndexPath est à nouveau exécuté, d.deviceName renvoie une erreur car il est hors de portée.
Quelqu'un peut-il m'aider à comprendre pourquoi? Je suis sûr que ça a quelque chose à voir avec un article qui sort ... mais ... ??
Merci d'avance.
Vous avez des fuites sur le tableau retDevices, qui n'est même pas déclaré correctement (vous avez oublié le *). De même, dans le deuxième bloc de code, vous semblez fuir l'objet devs. –
Vous avez également des fuites de chaque nouveauDevice dans le tableau retDevices. –
Le manquant * a été un oubli de ma part lors de la copie du code. Mon application a le * à cette déclaration. NewDevice devrait-il sortir à la fin de la boucle? – bugfixr