J'ai un UINavigationController composé d'un tableau dans lequel je veux charger des données. J'ai une liste de dictionnaires contenant des dictionnaires pour chaque ligne de train qui, à leur tour, ont des dictionnaires pour chaque station avec les informations pertinentes ainsi qu'une chaîne lineName. J'ai besoin de collecter les clés des noms des stations et de les ajouter à un tableau pour remplir ma table (cela fonctionne).
Les noms des lignes sont stockés sous forme de chaîne dans mon dictionnaire lines avec la clé "lineName".
Root->|
|
|->TrainLine1(Dictionary)->|
| |-> lineName (String)
| |-> Station1 (Dictionary)
| |-> Station2 (Dictionary)
|
|
|->TrainLine2(Dictionary)->|
| |-> lineName (String)
| |-> Station1 (Dictionary)
| |-> Station2 (Dictionary)
Est-ce que je m'y prends de la mauvaise façon ? Dois-je réorganiser ma plist ? Le code ci-dessous fait planter l'application.
- (void)viewDidLoad {
NSString *path = [[NSBundle mainBundle] pathForResource:@"lineDetails" ofType:@"plist"];
NSDictionary *dictionary = [[NSDictionary alloc] initWithContentsOfFile:path];
NSDictionary *lineDictionary = [[NSDictionary alloc] initWithDictionary:[dictionary objectForKey:stationNameKey]];
NSMutableArray *stationsOnLine = [[NSArray alloc] init];
NSString *key;
for (key in lineDictionary) {
NSLog(@"Adding this in array:%@", key);
//NSString *key2;
NSString *nameToTry = [NSString stringWithString:key];
NSLog(@"nameToTry : %@", nameToTry);
//NSMutableDictionary *stationDictionary = [[NSDictionary alloc] init];
if (![key isEqualToString: @"lineName"])
{
//NSMutableDictionary *stationDictionary = [[NSDictionary alloc] init];
// NSLog(@"Yes");
//NSMutableDictionary *tempDict = [[NSDictionary alloc] initWithDictionary:[lineDictionary objectForKey:key]];
NSMutableDictionary *stationDictionary = [[NSDictionary alloc] initWithDictionary:[lineDictionary objectForKey:key]];
//stationDictionary = tempDict;
NSLog(@"Object for key-- %@",[stationDictionary objectForKey:kStationName]);
[stationsOnLine addObject:[stationDictionary objectForKey:kStationName]];
[stationDictionary release];
//[tempDict release];
}
/*
for (key2 in stationDictionary)
{
NSLog(@"Adding this in station array:%@", key);
}
*/
}
stationNames = stationsOnLine;
//[stationDictionary release];
[stationsOnLine release];
[lineDictionary release];
[dictionary release];
}
Sortie de la console du débogueur :
2010-03-31 00:42:39.842 AMT_Schedule[8395:207] did SelectRow Array contents:deux-montagnes
2010-03-31 00:42:39.844 AMT_Schedule[8395:207] Adding this in array:sunnybrooke
2010-03-31 00:42:39.844 AMT_Schedule[8395:207] nameToTry : sunnybrooke
2010-03-31 00:42:39.845 AMT_Schedule[8395:207] Object for key-- Sunnybrooke
2010-03-31 00:42:39.846 AMT_Schedule[8395:207] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: '*** -[NSCFArray insertObject:atIndex:]: mutating method sent to immutable object'
2010-03-31 00:42:39.847 AMT_Schedule[8395:207] Stack: (
29320283,
2521638153,
29404219,
29404058,
107345,
107124,
17393,
3270466,
3263806,
3306080,
3302106,
3308563,
3289798,
3310951,
3289447,
15819,
3066438,
3049604,
303530,
29104832,
29101128,
37410325,
37410522,
2793391,
8628,
8482
)