2013-09-03 4 views
0

내 데이터 모델은 다음과 같습니다CoreData - 문제에 접근 관계

가 < ----- >> 개체 B < -----> 개체 C가

내가 객체의 그룹을 가져 객체 A는 NSFetchedResultsController를 통해 Core Data에서 가져온 것입니다. 이 그룹에서 하나 개의 특정 목적을 위해, 나는 그것과 관련된 하나의 개체 B를 가지고 있음을 알고 나는 개체 C.에게이 같은 것을 할 노력하고있어

검색 할 :

NSArray *bArray = [objectA.relationA allObjects]; 
ObjectB *myB = bArray[0]; 
ObjectC *myC = myB.relationB; 
(I've also tried [myB valueForKey:@"relationB"] with the same result) 

을 문제는 내가 고장이 오브젝트 C에 대한 화재 얻을 수 있다는 것입니다 - 나는 MYC이가 계속 :

$ 6 = 0x0a947c00 (법인 : ObjectC; ID : 0xa9680b0, 데이터 :) 난

이 값을 다른 뷰 컨트롤러에 전달하면 거기에 액세스 할 때 여전히 오류가 발생합니다. 끔찍하게 유용하지 않습니다.

개체를 가지고있을 때 다시 가져와야하는 것은 어리석은 것처럼 보이지만 그 밖의 다른 작업은 모른다. 이 스레드에서 찾을 수있는 모든 스레드는 오류가 정상이며 오류가 발생한 개체에 액세스 할 때 해고 될 것이라고 말합니다. 그러나 여기서는 발생하지 않는 것 같습니다.

제안 사항?

업데이트 :이 추가 시도가 :

[fetchRequest setRelationshipKeyPathsForPrefetching:@[@"relationA.relationB"]]; 

그러나 그것은 어떤 차이를하지 않았다.

답변

0

The problem is that I can't get the fault to fire for Object C - I keep getting this for myC:

$6 = 0x0a947c00 (entity: ObjectC; id: 0xa9680b0 ; data:)

myC에 아직 액세스를 시도하지 않았습니다. myC은 어떻게 든 사용하기 전까지는 오류가 발생합니다. the docs에서 : 그래서

Fault handling is transparent—you do not have to execute a fetch to realize a fault. If at some stage a persistent property of a fault object is accessed, then Core Data automatically retrieves the data for the object and initializes the object (see NSManagedObject Class Reference for a list of methods that do not cause faults to fire). This process is commonly referred to as firing the fault.

, 당신은 같은 것을 할 경우 (ObjectC을 가정하는 것은 name 속성이 있습니다) : 당신이 myC 화재의 결함 것을 발견한다

NSString *name = myC.name; 

를하면 자동적으로 진정한있을 것이다 함께 작업 할 객체.

All the threads I can find on this say that faults are normal and that they will be fired when you access the faulted object, but that doesn't seem to be happening here.

맞아. 더 이상 당신이 우리에게 말하지 않았다면, 당신은 단지 다른 시간에, 즉 당신이 myC에 객체를 할당했을 때 결함이 발생할 것으로 예상하는 것처럼 들립니다. 하지만 다시 한 번 말하지만, 잘못을 저 지르거나 속성을 설정하는 등의 실수를 할 때까지는 오류가 발생하지 않습니다.

+0

나는 그것을 시도하고는 대부분의 시간을 작동하는 것 같다,하지만 MYC에 액세스 할 때 나는 아직도 한 번이 오류가 발생했습니다 : "CoreData : 오류 : NULL _cd_rawData하지만 객체가 고장으로 전환되지 않는" 항상 새로운 것을 배울 무언가 ... – janineanne

+0

그 오류에 대한 정보가 있습니다. (같은 이름의 질문에) http://stackoverflow.com/q/9225046/643383. 폴트를 소유 한 컨텍스트와 관련되지 않은 스레드에서 폴트를 시도하는 것처럼 들립니다. 다른 thread로 fault를 사용해야하는 경우는,'objectID'를 건네 주어, 문맥의'-objectWithID :'메소드를 사용해 목적지 thread의 문맥으로 객체를 취득하는 것을 고려해주세요.아니면 내가 이걸 너무 많이 읽고있어. – Caleb