我想創建一個數組(城市)的數組(國家)。每當我嘗試添加一個項目到我的城市陣列,我得到這個錯誤: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 2009-11-04 21:46:59
我有[currentCities init]的原因;這是因爲當我們切換到下一個狀態時它需要初始化一個新的實例。 更改該行確實解決了這個問題,但引發了另一個問題,但是添加了您提到的第二步([[NSMutableArray alloc] init])修復了該問題。 謝謝。 – 2009-11-04 22:10:20
如果您初始化一個新實例,那麼您應該也正在分配一個新實例。 – Wevah 2009-11-04 22:51:04