2016-08-23 63 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 
     } 
    } 
}