2010-12-01 1 views
1

백그라운드 스레드에서 데이터를 구문 분석하고, 새 엔티티를 삽입하고 다른 기존 엔티티와의 관계를 설정합니다.코어 데이터 : 관계 설정 시도가 잘못되었습니다. + (null) context

때로는 '다른 컨텍스트의 개체 간 관계를 설정하려고 시도하는 중입니다.'오류가 발생합니다.

이것에 대해 더 자세히 읽은 후에 내 백그라운드 스레드에 새로운 ManagedObjectContect를 만들고이를 사용하여 새로운 엔티티를 삽입하고 관계를 설정합니다. 내 백그라운드 스레드에서만이 새로운 ManagedObjectContext를 사용하도록주의합니다. 기존 개체와 이러한 새로운 개체 중 하나 사이의 관계를 설정하기 위해 기존 엔터티를 찾아야 할 때 [moc objectWithId : id]를 호출하여 새 moc를 사용하여 기존 개체를 가져옵니다. 그러나 여전히 오류가 발생합니다.

실망한 나는 물건을 출력하기 시작했습니다. 나는 관계를 설정하기 직전에 각 NSManagedObject의 managedObjectContext 속성을 인쇄 할 때 때로는 '(null)'이 출력된다는 것을 알아 차렸다. 문제가 발생한 것 같습니다.

누구든지 내가 뭘 잘못하고 있다고 말할 수 있습니까? 내 객체에 왜 (null) moc가있는 이유는 무엇입니까?

도움을 주셔서 감사합니다.

+0

backtraces 및 코드를 포함하지 않으면이 문제를 진단 할 수 없습니다. –

답변

0

코드를 볼 필요가 있습니다. 내 첫 번째 생각은 당신이 직접 managedObjectContext를 속성을 통해 액세스하는지 아니면 직접 확인하는지 여부입니다.

속성을 통해 액세스하면 Apple에서 제공하는 템플릿 핵심 데이터 메소드를 사용하는 경우 새 관리 객체를 만들 때 컨텍스트를 항상 사용할 수 있습니다 (즉, nil이 아님).

+0

Rog, managedObjectContext 속성을 확인하기 위해 간단히 [entity managedObjectContext]를 로깅합니다. 때때로 '(null)'을 반환하는 것입니다. – toofah

+0

코드를 보지 않고는 당신을 도울 수 없습니다, 미안 해요! – Rog

0

NSmanagedObject에는 isInserted라는 메서드가 있습니다.이 개체는 managedObjectContext에 삽입되었는지 여부를 확인합니다. NSObject가 삽입되지 않은 경우 NSManagedObjectContext의 insert 메서드를 사용합니다.

+0

조나단, 새로운 엔티티가 moc에 삽입됩니다. 내가 관련이있는 기존 엔티티는 이미 영구 저장소에 있습니다. – toofah

+0

두 개체 컨텍스트를 병합하면됩니다. NSManagedObjectContext의 mergeChangesFromContextDidSaveNotification :을 조사하십시오. 또한 핵심 데이터 북 예제와 marcus zara의 핵심 데이터 북을 살펴보십시오. 후자는 이런 상황을 처리하는 데 가치있는 투자였습니다. – Jonathan

1

다른 컨텍스트와 병합되지 않은 한 컨텍스트에서 생성 된 개체에 연결하려고 할 가능성이 가장 높습니다. 컨텍스트가 병합 될 때까지 한 컨텍스트에서 변경된 내용은 다른 컨텍스트에서 나타나지 않습니다. 그것이 당신의 오류 메시지가 말하는 것입니다.

Null 개체는 일시적인 개체 ID 사용으로 인해 발생할 가능성이 큽니다. objectID는 영구 저장소에 개체가 저장 될 때까지 고정되지 않습니다. 그 때까지는 임시 ID가 저장되며 저장되면 임시 ID가 변경됩니다.