2013-03-23 4 views
0

코어 데이터 엔티티를 표시하는 테이블 뷰 행에 대한 복사 및 붙여 넣기를 지원할 수 있기를 원합니다. 이 엔티티에는 하나의 속성과 두 개의 관계가 있습니다. Apple이 추천 한 사전 보관 기술 ('NSPersistentDocument Core Data Tutorial'에서)을 사용하면 관계에서 오류가 발생합니다.관계가있는 핵심 데이터 엔티티 보관

for (id sectionObject in selectedSectionsArray){ 
    NSDictionary *thisDictionary = [sectionObject dictionaryRepresentation]; // 'sectionObject' has 1 attribute and 2 relationships (one-to-many) 
    [copyObjectsArray addObject:[sectionObject dictionaryRepresentation]]; 
} 
NSPasteboard *generalPasteboard = [NSPasteboard generalPasteboard]; 
[generalPasteboard declareTypes:[NSArray arrayWithObjects:MSSectionsPBoardType, NSStringPboardType, nil] owner:self]; 
NSData *copyData = [NSKeyedArchiver archivedDataWithRootObject:copyObjectsArray]; // Here's where it crashes. ERROR MESSAGE: "-[NSManagedObject encodeWithCoder:] unrecognized selector sent to instance 0x22fd410" 

따라서, 그것의 URI를 보관해야합니다 대지에 관계를 복사 할 수있는 유일한 방법을 보인다 : 여기에 문제가 발생 코드의 필수적인 부분입니다. 이 경우 임시 ID를 참조하는 데 어려움이 있습니다. 누군가이 사실을 확인해 주시겠습니까? 그렇게 열심히해야합니까?

+0

"NSPersistentDocument 핵심 데이터 자습서"에 대한 링크를 제공 할 수 있습니까? 제목 페이지에 "권장하지 않음"이라고 표시된 Mac OS X 10.4 용 버전 만 있습니다. –

답변

1

해당 문서를 자세히 읽지 않았습니다. 사용자 지정 사원 논리 섹션에서 설명하는 데는 관계가 복사되지 않습니다. 몇 가지 이유가 있습니다. 그런 다음 코드가 특정 속성 만 복사하는 방법을 설명합니다. 복사 할 특정 속성을 선택하는 것만 큼 문서를 따라 갔지만 관계를 생략하는 것은 아닙니다. 당신이보고있는 오류에 관해서는

, 당신은 NSCoding을 준수 특히, 관리되는 개체를하지 않는 객체를 포함하는 사전에 archivedDataWithRootObject:를 호출하고 있기 때문에이 문제가 발생

-[NSManagedObject encodeWithCoder:] unrecognized selector sent to instance 0x22fd410 

. 이와 같은 보관은 속성 목록 유형에 대해서만 자동으로 작동합니다. 다른 모든 경우에는 NSCoding을 구현해야합니다. 그렇지 않으면이 오류가 발생합니다.

관계를 복사하려는 경우 관리 대상 개체 ID의 URI를 복사하는 것이 좋습니다. 임시 개체 ID에 문제가있는 경우, 다음 중 하나를 수행합니다

  • 저장 개체를 저장하지 않고 영구적 인 ID를 취득하는
  • 전화 obtainPermanentIDsForObjects:error:을 변경합니다.
관련 문제