[ios] NSManagedObjectContextDidSaveNotification sent in todayExtension?
참조 : https://www.innoq.com/en/blog/ios-writing-core-data-in-today-extension/
-
context 를 여러 개 사용하는 경우에 context 에 대한 commit 분의 sync 를 맞춰주기 위해
CoreData 는 내부적으로 NSManagedObjectContextDidSaveNotification noti 를 보내고,
이를 addObserver 해놓은 곳에서는 mergeChangesFromRemoteContextSave 함수를 통해 sync 를 맞춘다.
-
그러나 todayExtension 에서 context 에 변화를 주었다고 해도,
Main app 에서는 process 가 다르기 때문에 ( 혹은 PersistanceStoreCoordinator 가 달라서? 내부구현은 알 수 없으니 ) 해당 Notification 을 받을 수 없다.
-
그럼 어떻게 해결하느냐?
UserDefault 에 어떤 Flag 를 설정해놓고(UserDefault Group 을 사용하면 앱과 todayExtension 이 공유 가능하다), Main App 이 Foreground 에 올라오는 순간 해당 flag 가 체크되어 있다면
ManagedObjectContext 를 reset 하는 방법이 있겠다.
그러나 이 방법은 reset 을 하는 순간에 이미 작업중이던 내용들이 날아갈 수 있으므로 ideal 한 solution 은 아니다.
-
그렇다면 변경분을 UserDefault 에 다 써 놓고,
Main App 이 Foreground 로 올라오는 순간 해당 내용을 일괄 반영해야 하는데...
쉽지 않아 보인다.
-
NSManagedObjectID 나 NSURL 의 array 형태를 mergeChangesFromRemoteContextSave 를 호출하며 전달해주면 해당 내용만 merge 시킬 수 있다.
'프로그래밍 놀이터 > iOS' 카테고리의 다른 글
[ios] NSCocoaErrorDomain Code=522 ( SQLite ) (0) | 2018.02.12 |
---|---|
[ios] Application State 가져오는 방법 (0) | 2018.02.11 |
[ios 10] CallDirectory beginRequestWithExtensionContext 이야기 (0) | 2018.02.09 |
[ios 10] CallDirectory debug 붙이기 (0) | 2018.02.08 |
[ios] CallKit - CallDirectoryExtension (0) | 2018.02.07 |
댓글