3
我有一個設計用來取對象的函數,並且如果在數組中存在具有相同標識符字符串的函數,請更新它,if它不,添加對象。添加部分工作,但由於某種原因,更新功能會丟失數據。替換陣列中的對象不起作用,但添加一個新對象
這裏是我的代碼:
- (void)addOrUpdateGroup:(Object *)myObject
{
for (H2Group *existingObject in objectsArray) {
if ([existingObject.identifier isEqualToString:myObject.identifier]) {
[objectsArray replaceObjectAtIndex:[objectsArray indexOfObject:existingObject] withObject:myObject];
return;
}
}
[objectsArray addObject:myObject];
}
調用此方法時使用具有陣列中的對應一個對象,它執行,但似乎並沒有更換的對象。
使用斷點和日誌,我已確定:
- 將進入循環,以及一個新的對象與現有標識的檢測工作正常。
- 新對象完好無損,如果我改用
[objectsArray addObject:myObject]
,則會正確添加對象。 - 如果我使用
replaceObjectAtIndex:0 withObject:myObject
,則會發生同樣的問題。
任何想法都將非常感激。
1)我很驚訝此代碼不會崩潰,因爲您正在修改可變數組,而您使用快速枚舉。 2)這個代碼效率很低。爲什麼使用快速枚舉和'indexOfObject:'?要麼使用普通的'for'循環,所以你已經知道匹配對象的索引,或者使用'enumerateObjectsUsingBlock:'來獲得兩者的好處。 – rmaddy
感謝您的輸入,我認爲它沒有崩潰,因爲循環在數組發生變異後,循環繼續到另一個迭代之前被return語句破壞。但我也會嘗試你的方法。 –
當你調用'replaceObjectAtIndex:'時,你如何確定數組沒有正確更新? – rmaddy