2009-12-09 8 views
0

코어 데이터에 반대 관계가없고 삭제 규칙이 "무효화"및 "조치 없음"으로 설정된 경우 (즉, 의미 있음) 내가코어 데이터가 삭제 된 관계를 저장하지 않음

은 기본적으로 내가 누구의 재산 변전소 포인트 많은 역 객체에 MergedStation이) 아무 소용로 모두를 시도했다 : MergedStation.subStation - 나는 동적으로 생성되는 [mergedStation addSubStationsObject:newStation];을 (전화 >> 역

)를 모든 훌륭하게 작동하고 새 스테이션이 추가되면 모든 것이 새로 고쳐지고 올바르게 저장되므로 다음에 프로그램을 열 때 모두 올바르게됩니다.

그러나 [mergedStation removeSubStationsObject:stationToRemove]; (동적으로 생성 됨)을 호출하면 모든 것이 현재 프로그램 세션에서만 올바르게 삭제됩니다. 프로그램을 닫고 다시 열면 아무 것도 변경하지 않은 것처럼 보입니다. 나는 추가 및 제거 두 가지 방법 후라는 동일한 방법이 있습니다

[self.managedObjectContext refreshObject:station mergeChanges:YES]; 

[self.managedObjectContext processPendingChanges]; 

[self.managedObjectContext saveAndPrintErrors]; 

나는 또한 일하러 가야 그 위의 코드의 서로 다른 조합을 시도했다. 어떤 도움을 주셔서 감사합니다!

+0

saveAndPrintErrors를 정의 했습니까? 저장시 오류가 없습니까? 왜 그 반대의 관계가 있지 않니? – lyonanderson

답변

4

그것은 "은 현재 프로그램 세션에 대해 올바르게 삭제"에 의해 당신이 무슨 뜻인지 불분명하다. 삭제 규칙은 관계 원점 (MergedStation)이 삭제 될 때 수행 할 작업을 지정하며 관계가 파손될 때 수행되는 작업이 아닌 작업을 지정합니다. 연결을 제거해도 엔티티 인스턴스가 삭제되지 않아야합니다. 서브 스테이션을 삭제하려면 -[NSManagedObjectContext deleteObject:]을 사용하여 서브 스테이션을 수동으로 삭제해야합니다.

말 그대로 수백만 개의 변전소 (또는 OS X에서 수십억)가 없다면 관리 대상 개체 모델에 반대 관계를 포함해야합니다. 핵심 데이터는 객체 그래프 관리 프레임 워크이며 객체 그래프 관리는 모든 관계가 양방향 일 때 가장 잘 작동합니다 (가장 쉽습니다). 코어 데이터는 역 (inverse)을 포함 시키면 무거운 짐을 많이 줄 것입니다. 코드의 역함수를 사용할 필요가 없습니다. 당신이 원한다면 그것을 무시할 수 있습니다. 당신이 지불하는 유일한 처벌은 약간의 기억입니다. 여분의 메모리 사용이 코드에 해로운 것으로 입증 될 때까지 역관계를 유지해야합니다.

+0

+1은 역수를 포함합니다. 핵심 데이터가 기대합니다. 그렇게 잘 작동합니다. – mmc

1

동일한 문제가 있습니다. 그가 "현재 프로그램 세션에서만 올바르게 삭제"한다는 것은 응용 프로그램을 다시 시작하기 전에 관리 객체를 검사하면 해당 상태에 있기를 원합니다 (그의 경우 SubStation 객체가 관계에서 제거되었습니다) 수집).

제안 된대로 데이터 모델에 반대 관계를 추가하고 모든 것이 마술처럼 작동했습니다. 잘했으면 좋겠지 만, 여분의 메모리 처벌을 지불하지 않고이 문제를 해결할 방법이 있는지 정말 알고 싶습니다.

0

어. 나는 이것과 밀접한 관련이있는 문제에 너무 많은 시간을 할애했다. 필자의 경우, 대다수 관계에 엔티티를 추가하고 앱을 다시 시작한 후에 변경 사항을 잃어 버리고있었습니다. 반비례 관계를 추가하는 것이 문제를 해결 한 것이지만 그 이유를 이해하지 못합니다. 내 생각에 반비례 관계가 좋은 이유는 알지만 일방적 관계가 무의미하다면 핵심 데이터에 위임되거나 최소한 기본 설정을해야합니다.

내가 필요로하는 단서를 내게 주신 Erik P에게 감사드립니다! 그 역관계를 추가하십시오!

관련 문제