이 질문에 대한 답변은 두 가지입니다. 첫 번째는 철학적입니다. 대부분의 경우 모델에 대한 업데이트를 즉시 수행해야합니다. 대부분의 경우 사용자는 저장, 커밋 등 변경 사항을 고민하지 않아도됩니다. Binding의 NSUndoManager
과의 통합은 사용자가 수행 한 모든 작업을 취소 할 수 있음을 의미합니다 (실행 취소 할 수 있어야합니다). 모든 사용자 작업은 변경 작업을 수행 한 후 실행 취소해도 사용자의 데이터 나 응용 프로그램 상태에 불필요한 "해를 끼치 지 않도록"위험이 적어야합니다. 모델 레이어에 핵심 데이터를 사용하는 경우 NSManagedObjectContext
의 메소드를 사용하여 프로그래밍 방식으로 변경 사항 집합을 언제든지 롤백하거나 저장할 수 있습니다. 이 정말로인데, 사용자가 "제출"버튼을 필요로하는 좋은 이유가 아니라면, 입력하지 마십시오.이 철학에 맞춰 Gmail의 "보내기 취소"기능이 있습니다. 전자 메일을 보내는 것조차도 실행 취소 할 수 있어야합니다 (이유 내에서).
두 번째 대답은 더 실용적입니다. 물론 코코아와 같은 일을 용서하지 않는 백엔드 시스템을 다루는 상황이 있습니다. 이 경우 가장 좋은 방법은 UI의 모델 역할을하는 임시 모델 객체를 만드는 것입니다 (MVVM (Model-View-View-Model) 아키텍트에서 View-Model을 생각해보십시오). 사용자가 변경 사항을 제출하면 임시 모델 객체를 영구 모델에 복사 할 수 있습니다. 핵심 데이터에서 별도의 관리 객체 컨텍스트를 백업하는 메모리 내장 영구 저장소를 사용하여 이러한 임시 인스턴스를 보유한 다음 제출시이 임시 컨텍스트의 변경 사항을 주 컨텍스트에 병합 할 수 있습니다.