개체를 가져 오는 기능을 가지고 있으며 동일한 식별자 문자열을 가진 배열이 배열에 이미 있으면 업데이트하고 그것은 객체를 추가하지 않습니다. 추가 부분이 작동하지만 어떤 이유로 업데이트 기능이 데이터를 잃습니다.배열의 개체 교체가 작동하지 않지만 새로운 배열 추가
여기 내 코드입니다 :
- (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