2010-03-25 4 views
0

코어 데이터 객체에서 @unionOfSets를 사용하는 데 문제가 있습니다.코어 데이터 및 @unionOfSets

나는 list라고하는 nsmanagedobject의 하위 클래스가 있습니다. list에서 listElements로는 many-to-many 관계가 있습니다. 각 listElement는 파일과 일대일 관계를 갖고 있습니다.

NSLog(@"%@", [NSApp valueForKeyPath:@"delegate.mainWindowController.sidebarViewController.arrayController.selection.list.listElement"]); 

내가 listElements 각 파일의 집합을 얻으려고 그러나

2010-03-24 18:11:15.844 Pirouette[7459:80f] Relationship objects for {(
<PRPlaylistElement: 0x10484c0> (entity: PRPlaylistElement; id: 0x10a71b0 <x-coredata://1EE9CEAD-E006-4487-8AA7-47764B87A91C/PRPlaylistElement/p108> ; data: <fault>), 
<PRPlaylistElement: 0x1048a10> (entity: PRPlaylistElement; id: 0x10ac7d0 <x-coredata://1EE9CEAD-E006-4487-8AA7-47764B87A91C/PRPlaylistElement/p153> ; data: <fault>), 
<PRPlaylistElement: 0x1048460> (entity: PRPlaylistElement; id: 0x10acf60 <x-coredata://1EE9CEAD-E006-4487-8AA7-47764B87A91C/PRPlaylistElement/p157> ; data: <fault>), 
<PRPlaylistElement: 0x1047c60> (entity: PRPlaylistElement; id: 0x10a6850 <x-coredata://1EE9CEAD-E006-4487-8AA7-47764B87A91C/PRPlaylistElement/p105> ; data: <fault>) 

을 예상대로 listElements 세트를 인쇄합니다.

NSLog(@"%@", [NSApp valueForKeyPath:@"delegate.mainWindowController.si[email protected]unionOfSets.file"]); 

은 내가 일대 코어 데이터의 관계 NSSets라고 생각하기 때문에

2010-03-24 18:41:20.075 Pirouette[7616:80f] An uncaught exception was raised 
2010-03-24 18:41:20.082 Pirouette[7616:80f] [<NSCFSet 0x1056e90> valueForKeyPath:]: this class does not implement the unionOfSets operation. 
2010-03-24 18:41:20.086 Pirouette[7616:80f] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '[<NSCFSet 0x1056e90> valueForKeyPath:]: this class does not implement the unionOfSets operation.' 

혼란 다음과 같은 오류를 얻을.

NSLog(@"%@", [NSApp valueForKeyPath:@"delegate.mainWindowController.sidebarViewController.arrayController.selection.list.listElement.file"]); 

는 내가 그것에 nsarraycontroller의 contentSet를 결합하지 못할 어떤 이유 그러나

2010-03-24 18:16:45.843 Pirouette[7505:80f] {(
<PRSong: 0x10a9c10> (entity: PRSong; id: 0x104a8d0 <x-coredata://1EE9CEAD-E006-4487-8AA7-47764B87A91C/PRSong/p123> ; data: <fault>), 
<PRSong: 0x10a00f0> (entity: PRSong; id: 0x1049b20 <x-coredata://1EE9CEAD-E006-4487-8AA7-47764B87A91C/PRSong/p128> ; data: <fault>), 
<PRSong: 0x10ac480> (entity: PRSong; id: 0x10476a0 <x-coredata://1EE9CEAD-E006-4487-8AA7-47764B87A91C/PRSong/p145> ; data: <fault>), 
<PRSong: 0x1099cd0> (entity: PRSong; id: 0x104a380 <x-coredata://1EE9CEAD-E006-4487-8AA7-47764B87A91C/PRSong/p120> ; data: <fault>))} 

다음과 제공에 유의한다.

답변

2

@unionOfSets 대신 @unionOfArrays을 사용하고 있습니다. 오류가 나타내므로이 값은 설정된 배열 연산이 아니라 배열 연산입니다.

+0

KevinD : "코어 데이터의 많은 관계가 NSSets라고 생각했기 때문에 혼란 스럽습니다."그들은 있습니다. 이것이 로그 출력에서 ​​"valueForKeyPath :"메시지의 수신자로 "NSCFSet"을 말하는 이유입니다. Chuck이 말했듯이이 집합에 배열 연산을 요청 했으므로 집합 연산을 지원하지 않는 배열 연산 예외가 있습니다. –

+1

질문에'@ unionOfArrays'가 표시되지 않습니다 (편집 됨 ?!). 어쨌든'@ unionOf..' 연산자는 배열에서 작동합니다. 이러한 연산자를 집합에 사용해야하는 경우에는 '@distinctUnionOf ...'변형을 사용하십시오. –