正如標題所示,我正在使用KVO觀察NSManagedObject屬性。方法override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?)
會觸發兩次:第一次爲屬性分配新值時,第二次當我將上下文保存在CD中時。我在設置屬性值後立即執行此操作。因爲這個,我在代碼中遇到了另一個問題,我的問題是爲什麼會發生這種情況,以及怎樣才能做到這一點(設置屬性,保存上下文並觸發一次方法)。也許我不應該立即保存上下文?KVO方法在NSManagedObject屬性上觸發兩次
0
A
回答
0
我相信我上面的評論(直覺)其實是正確的。它似乎沒有記錄,但在mergeChangesFromContextDidSaveNotification(即,當MOC保存時)觸發所有屬性的刷新的所有平臺上觀察到。 CF:KVO notifications after mergeChangesFromContextDidSaveNotification
對於如何處理的行爲的建議:志願代碼,一般來說,應該是冪等,速度快,恰恰是因爲它可以被調用的時候,當的keyPath設置即。
+0
我現在看到了,這是正確的。感謝您的幫助!我會將此標記爲正確答案。我已經將保存到代碼的其他部分,我已經將該對象作爲屬性的觀察者移除,因此它將啓動一次! – sheinix
相關問題
- 1. 觸發與KVO屬性更新
- 2. 更改NSManagedObject屬性而不觸發委託方法?
- 3. 驗證屬性被觸發兩次
- 4. WPF附加屬性觸發兩次
- 5. NSManagedObject上的NSManagedObjectContext屬性
- 6. NSManagedObject上的屬性爲空
- 7. 無法設置屬性NSManagedObject
- 8. 可可觸摸,NSManagedObject:設置屬性
- 9. NSManagedObject和KVO與文檔
- 10. item_databound正在兩次觸發
- 11. UIPinchGestureRecognizer正在兩次觸發
- 12. KeyUp - 觸發兩次
- 13. AlarmManager觸發兩次
- 14. SystemEvents.TimeChanged觸發兩次
- 15. switchstatement觸發兩次
- 16. 'onbeforeunload'兩次觸發
- 17. SDL_KEYDOWN觸發兩次
- 18. addEventListener觸發兩次
- 19. NSMutableAttributedString KVO未觸發通知
- 20. 屬性不會被觸發第二次
- 21. 在DataGridTextColumn的附加屬性上觸發
- 22. 屬性生成NSManagedObject
- 23. 唯一NSManagedObject屬性
- 24. NSManagedObject屬性爲空
- 25. 「$ locationChangeStart」上的Angular JS $觸發兩次event.preventDefault()
- 26. GCM上游消息觸發兩次
- 27. 單身屬性的KVO?
- 28. jQuery觸發點擊觸發兩次
- 29. 設置KVO來觀察init方法中的屬性
- 30. Click事件觸發兩次,但只有在觸摸設備上
猜測:由於對象在更新其值時「變髒」,因此在保存時可能會通過將更改保存到存儲區並使用db中的內容刷新實例上的所有屬性來清理所有屬性。 –