2016-08-23 58 views
1

我希望我的視圖中的某些標籤始終顯示NSManagedObject屬性的實際狀態。NSManagedObject更改反映在運行中更改

例如,我有firstNameLabel在視圖中。我填寫了來自NSManagedObject.firstName的數據。當更新NSManagedObject時,如何更新數據?我有很多這樣的標籤。

我讀過,我需要監視NSManagedObjectContextObjectsDidChangeNotification並檢查所有更改,如果該上下文,但那只是方法來做到這一點,有沒有我們更簡單的方法?我將如何檢查我在NSManagedObject中所做的更改(例如,如果我更改了1000個對象,但我只需要從其中更新數據)。

+1

使用鍵 - 值觀察,在OS X鍵 - 值綁定。 –

回答

0

解決方案:

var yourObject: YourManagedObjectClass! // here your example object 

override func viewDidLoad() { 
    // … your other init code 
    // don't forget to remove observer 

    NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(self.objectContextObjectsDidChange(_:)), name: NSManagedObjectContextObjectsDidChangeNotification, object: yourObject.managedObjectContext) 
} 

/// Object did changed, let's look what had changed 
func objectContextObjectsDidChange(notification: NSNotification) { 
    guard let userInfo = notification.userInfo, 
     let updatedObjects = userInfo[NSUpdatedObjectsKey] as? Set<NSManagedObject> where updatedObjects.count > 0 else { return } 

    for object in updatedObjects { 
     if let updatedObject = object as? YourManagedObjectClass where updatedObject.objectID == yourObject.objectID { 
      // Data changed in our object, you can refresh your label here 
      // Don't forget about threads if your object wasn't in main context 

      label.text = updatedObject.text 
return 
     } 
    } 
}