Я пытаюсь создать массив (состояния) массивов (городов). Всякий раз, когда я пытаюсь добавить элемент в мой массив City Я получаю эту ошибку:NSMutableArray addObject, непризнанный селектор
'NSInvalidArgumentException', reason: '*** +[NSMutableArray addObject:]: unrecognized selector sent to class 0x303097a0
Мой код выглядит следующим образом. Линия Это ошибки на это
[currentCities addObject:city];
Я уверен, что у меня есть некоторые проблемы управления памятью, как я до сих пор не понимаю, что все хорошо. Хотел, чтобы кто-то мог объяснить мне мою ошибку.
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];
}
}
Если вы делаете отдельную инициализацию (которые вы не должны, но если вы делаете), то необходимо прочитать 'currentCities = [currentCities инициализации ] '. Инициализаторы NSArray никогда не возвращают получателя, и инициализатор класса не гарантирует этого. – Chuck
Причина, по которой у меня есть [currentCities init]; потому что ему нужно будет инициализировать новый экземпляр, когда мы перейдем к следующему состоянию. Изменение этой строки устранило эту проблему, но подняло другую проблему, однако добавив второй шаг, который вы упомянули ([[NSMutableArray alloc] init]) исправил эту проблему. Спасибо. –
Если вы инициализируете новый экземпляр, вам следует также назначить новый экземпляр. – Wevah