2012-12-16 3 views
0

NSMutableArray 개의 사용자 지정 개체가 NSArchiver을 통해 보관됩니다. 보관 파일을 백업으로 가져 와서 앱의 기존 NSMutableArray과 병합 할 수 있어야합니다. 인앱 NSMutableArray과 보관되지 않은 사본간에 중복을 제거해야하지만 NSSet을 사용하거나 isEqual 또는 containsObject을 통해 비교를 사용하는 일반적인 방법은 보관 후에는 원래 같음이 분명하지 않지만 개체로 작동하지 않습니다. 두 배열을 통해 중첩 된 반복을 수행하고 개체 ivars를 비교할 수 있지만 꽤 무거워 보입니다.보관 후 개체 비교

내가 빠진 것이 있습니까? 나는 다소 객관적인 - C와 NSArchiver을 사용하여 새로운입니다. (그들은 사용자 인 경우)

답변

1

isEqual:hash 그렇지 않으면 당신은 당신이 이미 가지고있는 인스턴스와 언 아카이브 된 항목을 비교할 수 없습니다, 당신은 NSArchiver로 저장하는 객체에서 재정의해야합니다.

일반적으로 isEqual: 메서드는 두 개체의 평등에 의미있는 모든 ivars를 신경 써야합니다. 그렇지 않은 경우에도 다른 많은 개체를 사용하는 두 개체를 비교할 수 있다고 생각하지는 못하기 때문에 그들 모두를 확인하십시오. 그것은 당신이해야 할 일입니다.

x, y 및 z 이코스가있는 클래스 A가있는 경우 보통 [a1 isEqual:a2] iif [a1.x isEqual:a2.x] && [a1.y isEqual:a2.y] && [a1.z isEqual:a2.z]인데 이상한 것은 없습니다.

+0

지금이 점을 이해하기 시작했습니다. 감사. 나는 왜 내가 기존의 Array에서 객체 (여러 ivars로)를 비교할 수 있었는지 이해할 수 없었지만, 보관할 수있는 배열로는 그것을 비교할 수 없었다. 내가 말했듯이, isEqual을 재정의 (override)하는 것을 살펴볼 것이고, 나는 항상 객체 itars를 반복하고 비교할 수있다. 사전의 배열로 잘 작동하는 NSSet만큼 빠르지 않다. –