Ich versuche ein Array (States) von Arrays (Cities) zu erstellen. Jedes Mal, wenn ich versuche, ein Element zu meinem City-Array hinzuzufügen, erhalte ich diesen Fehler:NSMutableArray addObject, nicht erkannter Selektor
'NSInvalidArgumentException', reason: '*** +[NSMutableArray addObject:]: unrecognized selector sent to class 0x303097a0
Mein Code ist wie folgt. Die Linie es Fehler auf
ist[currentCities addObject:city];
Ich bin sicher, dass ich etwas Memory Management Problem habe, wie ich es immer noch nicht verstehen gut, dass. Hatte gehofft, dass mir jemand meinen Fehler erklären könnte.
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];
}
}
zu ändern Wenn Sie separate Initialisierung tun (die Sie sollten nicht, aber wenn Sie das tun), es 'currentCities = lesen muss [currentCities init ] '. NSArray-Initialisierer geben den Empfänger niemals zurück, und dies wird von keinem Klasseninitialisierer garantiert. – Chuck
Der Grund, warum ich die [currentCities init] habe; Zeile ist, weil es eine neue Instanz initialisieren muss, wenn wir in den nächsten Zustand wechseln. Das Ändern dieser Zeile behob dieses Problem, führte aber zu einem weiteren Problem. Durch das Hinzufügen des zweiten Schritts ([[NSMutableArray alloc] init]) wurde dieses Problem jedoch behoben. Danke. –
Wenn Sie eine neue Instanz initialisieren, sollten Sie auch eine neue Instanz zuweisen. – Wevah