2011-08-17 3 views
2

두 관련된 질문 : 당신이 [NSSet setWithArray:]를 사용하는 경우NSManagedObject에 대한 NSSet에있는 NSArray에서 항목을 전송

  1. , 그것은 자동으로 중복 된 개체를 제거 하는가?

  2. NSSet 정확히 "복제"를 의미하는 것으로 말할 수 있습니까? 나는. 이름과 섹션 번호가있는 "대학 과정"개체가 여러 개 있고 NSSet으로 전송하고 싶다면 각 대학 과정 중 하나만 주어진 이름으로 유지해야합니다 (예 : 세 섹션이있는 경우). 미적분, 미적분의 한 섹션을 유지하는 방법은 섹션 번호가 다른 경우에도 마찬가지입니다. 따라서 기본적으로 동일한 것으로 인식되지 않습니다.

고마워요! 그 질문이 불분명한지 알려주십시오. 나는 그것을 말로 표현하는 방법을 찾는데 어려움을 겪고 있었다.

편집 :이 질문은 해당 isEqual: 메서드를 재정의 할 수없는 NSManagedObjects 관련이 있습니다. documentation 가입일

답변

7
  1. :

    같은 객체 번 배열 이상 나타나는 경우는, 상기 리턴 세트 번만 첨가한다.

  2. 평등

    -isEqual: 방법 (및 -hash 법)으로 코코아 걸쳐 여기에 결정된다. 두 개의 사용자 정의 객체를 동일하게 간주하려면이 객체를 적절하게 대체해야하며 두 객체를 모두 재정의해야합니다. 이것들은 일반적으로 실제로 동등하고 대체로 상호 교환 가능한 (그러나 별개의 객체 임) 객체가 그렇게 보이도록 사용될 수 있습니다. 예를 들어, 대학 과정 객체가 실제로 "다르다"(즉, 동일한 전반적인 "미적분"주제를 공유 할지라도 서로 다른 클래스를 나타냄) 것처럼 들리므로 해당 객체 인스턴스를 "동일"객체라고 부르는 것이 문제가되는 것처럼 보입니다. 이것이 대규모 프로젝트/코드 기반 인 경우. 귀하의 경우, 하나씩 세트에 오브젝트를 추가하고 각 "주제"중 하나를 얻기 위해 추가 할 때 자신의 비교를 고려할 수 있습니다.

+0

죄송합니다. isEqual을 오버라이드 할 수 있으며,'hash' 함수를 살펴볼 것입니다. 전에 들어 본 적이 없어요. (iOS에 대한 새로운 기능). – Mason

+2

@Mason : 차가워요. 재정의 할 때, 코스 이름이있는 문자열의 해시처럼 평등하게 구분하는 데 사용하는 내부 데이터의 해시 값을 전달하기가 쉽습니다. 해쉬 *는 "같음"객체에 대해 동일해야하지만 다른 경우에는 고유하지 않아도됩니다. –

+0

어, 오, 합병증이 추가되었습니다. 내가 사용하는 개체는 NSManagedObjects이므로'isEqual :'을 재정의하는 것은 불법입니다. 나는 그것이 조금 질문을 바꾸는 것을 추측한다. 어떤 팁? – Mason

관련 문제