Sto provando a creare un array (Stati) di array (città). Ogni volta che provo ad aggiungere un elemento al mio Array Città ottengo questo errore:NSMutableArray addObject, selettore non riconosciuto
'NSInvalidArgumentException', reason: '*** +[NSMutableArray addObject:]: unrecognized selector sent to class 0x303097a0
Il mio codice è il seguente. La linea E gli errori sul è
[currentCities addObject:city];
Sono sicuro che ho avuto qualche problema di gestione della memoria come io ancora non lo capisco tanto bene. Speravo che qualcuno potesse spiegarmi il mio errore.
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];
}
}
Se fare l'inizio separato (che non si dovrebbe, ma se si fa), è necessario leggere 'currentCities = [currentCities init ] '. Gli inizializzatori NSArray non restituiscono mai il ricevitore e non è garantito l'inizializzatore di classe. – Chuck
Il motivo per cui ho l'init [currentCities]; la linea è perché sarà necessario inizializzare una nuova istanza quando passeremo allo stato successivo. La modifica di tale riga ha risolto il problema, ma ha sollevato un altro problema, tuttavia l'aggiunta del secondo passaggio da lei menzionato ([[NSMutableArray alloc] init]) ha risolto il problema. Grazie. –
Se si inizializza una nuova istanza, si dovrebbe assegnare anche una nuova istanza. – Wevah