Próbuję utworzyć tablicę (Stany) tablic (miasta). Ilekroć próbuję dodać element do mojego tablicy miasta otrzymuję ten błąd:NSMutableArray addObject, nierozpoznany selektor
'NSInvalidArgumentException', reason: '*** +[NSMutableArray addObject:]: unrecognized selector sent to class 0x303097a0
Mój kod jest następujący. Linia it błędów na to
[currentCities addObject:city];
Jestem pewien, że mam jakiś problem zarządzania pamięcią jak ja nadal nie rozumiem, to wszystko dobrze. Miałem nadzieję, że ktoś może mi wyjaśnić mój błąd.
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];
}
}
Jeśli zrobić oddzielną inicjalizacji (co nie powinno, ale jeśli robią), to musi przeczytać 'currentCities = [currentCities init, ] '. Inicjatory NSArray nigdy nie zwracają odbiornika, a inicjator klasy nie ma takiej możliwości. – Chuck
Powód, dla którego mam [currentCities init]; linia jest, ponieważ będzie konieczne zainicjowanie nowej instancji po przejściu do następnego stanu. Zmiana tej linii rozwiązała ten problem, ale wywołała inny problem, jednak dodanie drugiego kroku, o którym wspomniałeś ([init NSMutableArray alloc]) rozwiązało ten problem. Dziękuję. –
Jeśli zainicjujesz nową instancję, powinieneś także przydzielić nową instancję. – Wevah