替换数组中的对象不起作用,但添加一个新对象可以
Replacing Object in Array doesn't work, but Adding a new one Does
我有一个函数旨在获取一个对象,如果数组中已存在具有相同标识符字符串的对象,则更新它,如果不存在,则添加该对象。添加部分有效,但由于某种原因,更新功能会丢失数据。
这是我的代码:
- (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
也会出现同样的问题。
如有任何想法,我们将不胜感激。
像这样的东西更高效、更安全,而且(在我看来)更具可读性:
- (void)addOrUpdateGroup:(Object *)myObject {
NSUInteger idx = [objectsArray indexOfObjectPassingTest:^(Object *object, NSUInteger idx, BOOL *stop) {
return [object.identifier isEqualToString:myObject.identifier];
}];
if (idx != NSNotFound) {
[objectsArray replaceObjectAtIndex:idx withObject:myObject];
} else {
[objectsArray addObject:myObject];
}
}
它假定objectsArray
只包含Object
。
我有一个函数旨在获取一个对象,如果数组中已存在具有相同标识符字符串的对象,则更新它,如果不存在,则添加该对象。添加部分有效,但由于某种原因,更新功能会丢失数据。
这是我的代码:
- (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
也会出现同样的问题。
如有任何想法,我们将不胜感激。
像这样的东西更高效、更安全,而且(在我看来)更具可读性:
- (void)addOrUpdateGroup:(Object *)myObject {
NSUInteger idx = [objectsArray indexOfObjectPassingTest:^(Object *object, NSUInteger idx, BOOL *stop) {
return [object.identifier isEqualToString:myObject.identifier];
}];
if (idx != NSNotFound) {
[objectsArray replaceObjectAtIndex:idx withObject:myObject];
} else {
[objectsArray addObject:myObject];
}
}
它假定objectsArray
只包含Object
。