J'essaie de créer un tableau (States) de tableaux (Cities). Chaque fois que je tente d'ajouter un élément à mon tableau Ville Je reçois cette erreur:NSMutableArray addObject, sélecteur non reconnu
'NSInvalidArgumentException', reason: '*** +[NSMutableArray addObject:]: unrecognized selector sent to class 0x303097a0
Mon code est le suivant. La ligne est sur des erreurs it
[currentCities addObject:city];
Je suis sûr que j'ai un problème de gestion de la mémoire que je ne comprends toujours pas tout bien. J'espérais que quelqu'un pourrait m'expliquer mon erreur.
if (sqlite3_prepare_v2(db, sql, -1, &statement, NULL) == SQLITE_OK){
// We need to keep track of the state we are on
NSString *state = @"none";
NSMutableArray *currentCities = [NSMutableArray alloc];
// We "step" through the results - once for each row
while (sqlite3_step(statement) == SQLITE_ROW){
// The second parameter indicates the column index into the result set.
int primaryKey = sqlite3_column_int(statement, 0);
City *city = [[City alloc] initWithPrimaryKey:primaryKey database:db];
if (![state isEqualToString:city.state])
{
// We switched states
state = [[NSString alloc] initWithString:city.state];
// Add the old array to the states array
[self.states addObject:currentCities];
// set up a new cities array
currentCities = [NSMutableArray init];
}
[currentCities addObject:city];
[city release];
}
}
Si vous faites l'initialisation séparée (qui vous ne devriez pas, mais si vous faites), il faut lire 'currentCities = [currentCities init ] '. Les initialiseurs NSArray ne renvoient jamais le récepteur, et l'initialiseur d'aucune classe est garanti de le faire. – Chuck
La raison pour laquelle j'ai le [init de currentCities]; line est parce qu'il faudra initialiser une nouvelle instance quand on passe à l'état suivant. La modification de cette ligne a résolu ce problème mais a soulevé un autre problème, mais l'ajout de la seconde étape que vous avez mentionnée ([[NSMutableArray alloc] init]) a résolu ce problème. Merci. –
Si vous initialisez une nouvelle instance, vous devez également allouer une nouvelle instance. – Wevah