Question

Je suis en train de créer un tableau (États) de tableaux (villes). Chaque fois que je tente d'ajouter un élément à mon tableau de la ville, je reçois cette erreur:

  

'NSInvalidArgumentException', raison: « *** + [NSMutableArray   addObject]: sélecteur non reconnu envoyé à la classe 0x303097a0

Mon code est le suivant. Les erreurs ligne de it sur est

 [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. Espérais que quelqu'un pourrait expliquer mon erreur à moi.

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];
        }
    }
Était-ce utile?

La solution

Les lignes:

// set up a new cities array
currentCities = [NSMutableArray init];

lire:

// set up a new cities array
[currentCities init];

qui devrait, espérons résoudre votre problème. Au lieu d'initialiser votre tableau, vous envoyez un message d'initialisation à un objet de classe, ce qui ne fait rien. Ensuite, vous êtes pointeur de currentCities est toujours pas initialisé.

Encore mieux serait de supprimer cette ligne et changer la 4ème ligne de telle sorte que vous allouez et initialiser en une seule étape:

NSMutableArray *currentCities = [[NSMutableArray alloc] init];

Autres conseils

Vous devez appeler une sorte de initialiseur sur NSMutableArray, non? initWithCapacity, ou quelque chose comme ça? Je ne sais pas ce que vous obtenez si vous le laissez au large.

** Juste testé. Rendre [[NSMutableArray alloc] init] et vous serez très bien.

Il était problème d'initialisation pour moi.

Nous avons dû changer de

NSMutableArray *myArray  = [NSMutableArray mutableCopy]; // not initialized.  don't know why this even compiles
[myArray addObject:someObject];  // crashed

à

NSMutableArray *myArray  = [NSMutableArray new]; // initialized!
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top