2011-03-23 3 views
0

코어 데이터 어플리케이션의 데이터 모델은 매우 간단합니다. 기본적으로 나는 전화 상으로 이미 연락처 목록을 에 불러오고 있습니다. 사용자가 연락처를 탭하면 상세보기 화면에 이 찍히고 전화 번호 또는 이메일 주소를 선택할 수 있습니다. 그들이 세부 항목을 선택하면 핵심 데이터를 통해 저장합니다.코어 데이터는 관계 오브젝트가없는 오브젝트를 삭제할 수 없습니다.

Contact이라는 엔티티 하나와 Contact_Detail이라는 엔티티가 있습니다.

연락 < ----- >> CONTACT_DETAIL

CONTACT_DETAIL에 연락 관계가 거부의 삭제 규칙이있다. 컨택의 Contact_Detail 관계에 No Action이라는 삭제 규칙이 있습니다.

예를 들어 이전에 선택한 세부 항목을 제거하려는 경우 연락처와 동일한 ID를 가진 Contact_Detail 개체를 먼저 가져옵니다. Contact_Detail 개체가 하나만 반환 된 경우 Contact 엔터티에서 연락처를 제거해야한다는 것을 알았습니다. 이 하나 이상인 Contact_Detail 개체가 반환 된 경우 해당 개체를 제거하기 만하면됩니다.

데이터베이스가 예상대로 업데이트되고 있습니다 (세부 개체가 제거되고 특정 연락처에 대한 마지막 세부 개체가 제거되면 연락처도 마찬가지입니다). peoplePicker와 peopleDetailViewController 사이에 이 있습니다.

제가하는 데 문제는 내가 이메일 주소를 선택하면 이메일 주소를의 detailVC를 떠나 다시 peoplePicker에 peoplePicker, 다음 수익을 떠나, 다시 같은 접촉 및 해제한다는 것입니다 I 이전

 
NSValidationErrorKey=details, NSLocalizedDescription=The operation couldn’t be completed. (Cocoa error 1600.), NSValidationErrorValue=Relationship objects for {(
    (entity: Contact_Detail; id: 0xd21afe0 ; data:) 
)} on 0x5d5a780} 

나는 Contact_Detail 객체가 실제로 제거 얻을 않는 것을 확인할 수 있습니다 선택, 코어 데이터는 여전히 관계 오브젝트합니다 (Contact_Detail)이 있기 때문에 내 Contact을 삭제할 수 없습니다 것처럼 보이는 오류를 던지고있다 . 연락처를 제거 할 수없는 이유는 무엇입니까? 그리고 왜 이 특정 탐색 순서에서만 발생합니까?

일부 코드를 게시해야하는지 알려주세요. 이 첫 번째 오류가 발생한 후 핵심 데이터 작업을 계속 한 후에이 문제로 인해 충돌이 발생한다고 생각합니다.

감사합니다.

답변

4

왜 이런 식으로 삭제 규칙을 설정하지 않습니까?

Contact<--(cascade)-->>ContactDetail 
//when Contact is removed, all details are removed too) 

ContactDetail<<--(nullify)-->Contact 
//when Contact Detail is removed, this particular detail is removed from Contact too 
+0

이지 - 마지막 세부 개체가 제거 된 후 난 단지 연락처를 삭제할 수 있습니다 (그들은 등 2 이메일,이 전화를 선택한 수) 나는 확실히 Contact-> CONTACT_DETAIL 계단식으로 설정할 수 있지만이 걸릴 수 있습니다 캐스케이드의 장점은 하나 이상의 세부 오브젝트가 남아 있다고 판단한 후입니다. 내가 이해할 수 있듯이 Contact_Detail-> Contact는 무효화로 설정할 수 없습니다. 이는 누군가가 말, 네 개의 세부 개체 중 하나를 제거 할 때마다 연결된 Contact 개체가 제거되고 나머지 세 개의 세부 개체가 분리 된 상태로 남아 있기 때문입니다. – djibouti33

+0

아니요. 4 개의 연락처 세부 정보가있는 연락처를 가지고 있다고 가정 해 봅시다. 연락처 세부 정보 하나를 제거하면이 세부 정보가 연락처 개체 및 기본 영구 저장소/컨텍스트에서 사라집니다. 고아는 없습니다. 결과는 3 개의 연락처 세부 정보와 접촉합니다. – robertvojta

+0

+1 이것은 당신이 가고 싶은 길입니다. – TechZen

관련 문제