1

두 개의 핵심 데이터 엔티티간에 일대일 관계가 있습니다.CoreData 관계 확인 오류 처리

아래로 - >> B

A - B >> :

는 B (B의 객체가있는 동안 즉, (A)의 삭제를 거부) 거부 삭제 -> A : 무효로

여러 컨텍스트에서 하나의 컨텍스트에서 다른 변경 내용을 인식하지 못하므로이 컨텍스트에서 다른 컨텍스트에서 삭제중인 부모에 자식이 삽입되므로 부모 컨텍스트를 저장하는 동안 유효성 검사 오류가 발생합니다.

유효성 검증 오류를 처리하는 방법에 대한 정보가 거의 없으므로 대부분의 예제는 사용자에게 오류를 표시하고 변경 사항을 무시합니다. 그 특정 부모 개체의 삭제를 취소해야 할 경우?

유효성 검사 오류를 처리 할 수있는 옵션이 있습니까? NSValidationRelationshipDeniedDeleteError

+0

'mergeChangesFromContextDidSaveNotification'을 사용하여 다른 컨텍스트에서 계속 진행중인 작업을 계속 추적 할 수 있습니다. –

답변

0

변경 사항을 잃지 않고 특정 개체에 대해서만 삭제를 실행 취소 할 방법을 찾지 못했습니다. 따라서 childContext에서 상위 엔터티를 삭제 한 다음 childContext을 저장하면 삭제 된 엔터티는 자동으로 parentContext.deletedObjects에 추가됩니다. 다른 방법을 시도했지만 parentContext에서 삭제 작업을 취소 할 수있는 유일한 방법은 parentContext.refreshObject(deletedParent, mergeChanges: false)입니다. (롤백하거나 컨텍스트 재설정을 시도 할 수 있는지 확인하십시오.)

정말 어떤 일을 할 것인가에 따라 달라집니다 (비즈니스가 여기에 큰 영향을 미칩니다!). 그러나 나는 당신이 낙관적으로 일해야한다고 생각한다 : https://en.wikipedia.org/wiki/Optimistic_concurrency_control 때로는 충돌이 발생해도 트랜잭션을 롤백하고 다시 시작하는 것이 좋다.

일반적으로 childContextparentContext (어린이의 우선 순위가 높음)의 변경 사항을 무시합니다. 따라서 앱 아키텍처는 동일한 방식으로 작동해야합니다. childContext에있는 엔티티를 삭제할 때 새로운 하위 엔티티를 삽입했기 때문에 거부 규칙에 의해 중지되는 경우에도 parentContext의 엔티티도 삭제해야합니다. 삽입 된 엔티티를 제거한 다음 상위 엔티티를 삭제해야합니다. 그렇지 않으면 앱 아키텍처를 재검토해야합니다.