gpt4 book ai didi

objective-c - 替换数组中的对象不起作用,但添加一个新对象可以

转载 作者:搜寻专家 更新时间:2023-10-30 20:24:28 24 4
gpt4 key购买 nike

我有一个函数,旨在获取一个对象,如果数组中已存在具有相同标识符字符串的对象,则更新它,如果不存在,则添加该对象。添加部分有效,但由于某种原因,更新功能会丢失数据。

这是我的代码:

- (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

关于objective-c - 替换数组中的对象不起作用,但添加一个新对象可以,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37739102/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com