데이터를 가져 오는 데 NSOperation
을 사용하는 일부 코드 작업 중입니다. 사용자가 가져 오기 작업 중에 생성 된 NSManagedObject
인스턴스를 실행 취소 할 수있게하고 싶습니다.기본 스레드에서 수행되는 코어 데이터 삽입 취소
내가 알 수있는 바로는, 메인 스레드에서 수행되는 모든 작업에는 NSManagedObjectContext
-undoManager
을 사용할 수 없습니다. ( 별도의 스레드) 관리 객체 컨텍스트 사이
- 만 objectID에 통과해야 : 사용에 코어 데이터 프로그래밍 가이드 섹션에서 동시성을 지원하기 위해 감금 스레드, 우리는이 두 가지 조건이
- 관리 대상 객체 은 objectID를 사용하기 전에 컨텍스트에 저장해야합니다. 관리 객체들이 공유 할 수 있습니다 전에 대중 저장 (
는NSPersistentStore
)에 개인 저장 (NSManagedObjectContext
)에서 이동해야하기 때문에
이 의미가 있습니다.
메시지 -save:
도 실행 취소 스택의 관리 개체를 제거합니다. 같은 가이드의 메모리 관리 사용하여 코어 데이터 섹션에서 :
자신의 상황까지 자신의 상황에 맞는 에 의해 유지됩니다 변경 (삽입, 삭제, 또는 업데이트) 보류중인 객체가 전송 관리는 저장 : 재설정 또는 롤백 취소 메시지 또는 의 적절한 실행 취소 횟수는 변경 사항을 취소합니다.
나는이 문제를 해결하기 위해 여러 가지를 시도했다, 모든 것이 결국 작업 주 스레드에서 발생하는 대량 다시 리드 (와 비치 볼을 회전합니다.) 얻기에 모든 단서가 꺼져 만든 개체 작업 취소 메인 스레드가 매우 감사하게 될 것입니다. rdar://problem/8977725이
이 작업으로 삽입 된 모든 관리 객체 ID의 로그를 유지하지 않는 이유는 무엇입니까? 그렇게하면 사용자가 롤백을 원할 경우 단순히 반복하여 개체를 삭제할 수 있습니다. 돌연변이를 롤백해야하는 경우에도 키/값 변경 사항을 기록하는 것은 그리 어렵지 않습니다. 실행 매니저 (Undo Manager)에 이것을 넣으려고하는 것보다 간단합니다. – ImHuntingWabbits
위의 의견에 관해서는 어떻게 redo를 건의하겠습니까? – wbyoung