2016-12-06 4 views
0

제목에서 말한 것처럼 KVO를 사용하여 NSManagedObject 속성을 관찰하고 있습니다. override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) 메서드는 두 번 실행됩니다. 새 값을 속성에 처음 할당 할 때와 두 번째로 컨텍스트를 CD에 저장할 때입니다. 속성 값을 설정 한 직후에이 작업을 수행합니다. 그 때문에 코드에 또 다른 문제가 있습니다. 제 질문은 왜 이런 일이 일어나고, 그것을 수행하는 올바른 방법이 될 것입니까 (속성을 설정하고 컨텍스트를 저장하고 메서드를 한 번 실행하는 것입니다). 그 직후에 문맥을 저장해서는 안 될까요?NSManagedObject 속성에서 KVO 메서드를 두 번 실행하는 중

+0

추측 : 값을 업데이트 할 때 개체가 'dirtied'이므로 저장시 저장소에 변경 사항을 저장하고 인스턴스의 모든 속성을 db의 콘텐츠로 새로 고치면 모든 속성이 삭제됩니다 . –

답변

0

위의 의견 (직감)이 실제로 맞다고 생각합니다. 문서화되지 않은 것 같지만 모든 플랫폼에서 mergeChangesFromContextDidSaveNotification (즉, MOC 저장시)이 모든 속성에 대한 새로 고침을 트리거하는 것으로 관찰됩니다. CF : KVO notifications after mergeChangesFromContextDidSaveNotification

동작을 처리하는 방법에 대한 제안 : KVO 코드, 일반을, 그것은 종종 전화를받을 수 정확하게 때문에, 멱등 빠르게해야 즉, 키 패스가 설정되어있을 때.

+0

이제 알겠습니다. 맞습니다. 도와 줘서 고마워! 이것을 올바른 답으로 표시하겠습니다. 저장을 코드의 다른 부분으로 옮겨 속성을 관찰자로 지정한 객체를 이미 제거 했으므로 한 번만 실행됩니다! – sheinix