J'essaie de réparer une erreur EXC_BAD_ACCESS qui est levée lorsque j'accède à un NSMutableDictionary dans tableView: cellForRowAtIndexPath: indexPath. En ce moment, cela fonctionne quand je remplirai ridesDict avec une méthode loadHistoryFromDBExtended comme ceci:NSMutableDictionary provoquant EXC_BAD_ACCESS
self.ridesDict = [self loadHistoryFromDBExtended];
NSLog(@"rides dict %@", self.ridesDict);
Cependant, je ne veux pas appeler [auto loadHistoryFromDBExtended] pour chaque cellule étant chargé depuis le dictionnaire ne changera pas si j'ai essayé mouvement:
self.ridesDict = [self loadHistoryFromDBExtended];
à viewDidLoad et maintenant j'obtiens l'erreur de EXC_BAD_ACCESS quand je l'utilise:
NSLog(@"rides dict %@", self.ridesDict);
à tableView: cellForRowAtIndexPath: indexPath. D'après ce que j'ai lu, il semble que j'ai des problèmes de mémorisation, mais je n'arrive pas à le comprendre. J'ai essayé [self.ridesDict retain] dans viewDidLoad après l'appel de la méthode loadHistoryFromDBExtended mais cela n'a pas aidé. Je suis très nouveau à ce sujet, donc j'apprécierais n'importe quel pointeur pour savoir où aller.
Edit: Voici la méthode loadHistoryFromDBExtended:
-(NSMutableDictionary *)loadHistoryFromDBExtended
{
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
FMDatabase* db = [FMDatabase databaseWithPath:[self getDBPath]];
if (![db open])
{
NSLog(@"Could not open db.");
[pool release];
}
//get users
FMResultSet *rs = [db executeQuery:@"SELECT * FROM R order by date desc"]; //query provides result set
//create result array
NSMutableDictionary *myDictionary = [[NSMutableDictionary alloc] init];
while ([rs next])
{
NSMutableArray *usersDictArray = [NSMutableArray array];
//look up names for id's
[usersDictArray addObject:[rs stringForColumn:@"rNames"]];
[usersDictArray addObject:[rs stringForColumn:@"dName"]];
[usersDictArray addObject:[rs stringForColumn:@"date"]];
[myDictionary setObject:usersDictArray forKey:[rs stringForColumn:@"rID"]];
[usersDictArray release];
}
//return usersArray;
return myDictionary;
[myDictionary release];
[pool drain];
}
Est-ce que 'loadHistoryFromDBExtended' renvoie un objet appartenant à l'appelant? Quelle est la déclaration de 'ridesDict'? Est-ce une propriété? Si oui, s'agit-il d'une propriété 'retain' ou' copy'? Utilisez-vous des accesseurs synthétisés pour la propriété ou avez-vous implémenté des accesseurs personnalisés? –
loadHistoryFromDBExtended renvoie myDictionary déclaré dans cette méthode. ridesDict est déclaré dans l'interface et avec @property (non atomic, retain) NSMutableDictionary * ridesDict; en .h puis @synthesize ridesDict; dans le .m –