      */
     private func delegateToUpdatedWatchers(set: Set<NSManagedObject>, fromCloud: Bool) {
         set.forEach { [unowned self] (managedObject: NSManagedObject) in
-            switch String.fromCString(object_getClassName(managedObject))! {
-            case "ManagedEntityProperty_ManagedEntityProperty_":
-                let property = managedObject as! ManagedEntityProperty
-                let node = property.node
-                let name = property.name
-                let object = property.object
-                self.delegate?.graphDidUpdateEntityProperty?(self, entity: Entity(managedNode: node), property: name, value: object, fromCloud: fromCloud)
-                
-            case "ManagedActionProperty_ManagedActionProperty_":
-                let property = managedObject as! ManagedActionProperty
-                let node = property.node
-                let name = property.name
-                let object = property.object
-                self.delegate?.graphDidUpdateActionProperty?(self, action: Action(managedNode: node), property: name, value: object, fromCloud: fromCloud)
-                
-            case "ManagedRelationshipProperty_ManagedRelationshipProperty_":
-                let property = managedObject as! ManagedRelationshipProperty
-                let node = property.node
-                let name = property.name
-                let object = property.object
-                self.delegate?.graphDidUpdateRelationshipProperty?(self, relationship: Relationship(managedNode: node), property: name, value: object, fromCloud: fromCloud)
-                
-            case "ManagedRelationship_ManagedRelationship_":
-                self.delegate?.graphDidUpdateRelationship?(self, relationship: Relationship(managedNode: managedObject as! ManagedRelationship), fromCloud: fromCloud)
-                
-            default:
-                assert(false, "[Graph Error: Graph observed an object that is invalid.]")
-            }
+            guard "ManagedEntityProperty_ManagedEntityProperty_" == String.fromCString(object_getClassName(managedObject))! else {
+                return
+            }
+            let property = managedObject as! ManagedEntityProperty
+            let node = property.node
+            let name = property.name
+            let object = property.object
+            self.delegate?.graphDidUpdateEntityProperty?(self, entity: Entity(managedNode: node), property: name, value: object, fromCloud: fromCloud)
+            
+        }
+        
+        set.forEach { [unowned self] (managedObject: NSManagedObject) in
+            guard "ManagedRelationship_ManagedRelationship_" == String.fromCString(object_getClassName(managedObject))! else {
+                return
+            }
+            self.delegate?.graphDidUpdateRelationship?(self, relationship: Relationship(managedNode: managedObject as! ManagedRelationship), fromCloud: fromCloud)
+        }
+        
+        set.forEach { [unowned self] (managedObject: NSManagedObject) in
+            guard "ManagedRelationshipProperty_ManagedRelationshipProperty_" == String.fromCString(object_getClassName(managedObject))! else {
+                return
+            }
+            let property = managedObject as! ManagedRelationshipProperty
+            let node = property.node
+            let name = property.name
+            let object = property.object
+            self.delegate?.graphDidUpdateRelationshipProperty?(self, relationship: Relationship(managedNode: node), property: name, value: object, fromCloud: fromCloud)
+        }
+        
+        set.forEach { [unowned self] (managedObject: NSManagedObject) in
+            guard "ManagedActionProperty_ManagedActionProperty_" == String.fromCString(object_getClassName(managedObject))! else {
+                return
+            }
+            let property = managedObject as! ManagedActionProperty
+            let node = property.node
+            let name = property.name
+            let object = property.object
+            self.delegate?.graphDidUpdateActionProperty?(self, action: Action(managedNode: node), property: name, value: object, fromCloud: fromCloud)
         }
     }
     

        }
        
        set.forEach { [unowned self] (managedObject: NSManagedObject) in
            switch String.fromCString(object_getClassName(managedObject))! {
            case "ManagedEntity_ManagedEntity_":
                self.delegate?.graphWillDeleteEntity?(self, entity: Entity(managedNode: managedObject as! ManagedEntity), fromCloud: fromCloud)
                
            case "ManagedEntityGroup_ManagedEntityGroup_":
                let group = managedObject as! ManagedEntityGroup
                let node = group.node
                let name = group.name
                self.delegate?.graphWillRemoveEntityFromGroup?(self, entity: Entity(managedNode: node), group: name, fromCloud: fromCloud)
                
            case "ManagedEntityProperty_ManagedEntityProperty_":
                let property = managedObject as! ManagedEntityProperty
                let node = property.node
                let name = property.name
                let object = property.object
                self.delegate?.graphWillDeleteEntityProperty?(self, entity: Entity(managedNode: node), property: name, value: object, fromCloud: fromCloud)
                
            case "ManagedAction_ManagedAction_":
                self.delegate?.graphWillDeleteAction?(self, action: Action(managedNode: managedObject as! ManagedAction), fromCloud: fromCloud)
                
            case "ManagedActionGroup_ManagedActionGroup_":
                let group = managedObject as! ManagedActionGroup
                let node = group.node
                let name = group.name
                self.delegate?.graphWillRemoveActionFromGroup?(self, action: Action(managedNode: node), group: name, fromCloud: fromCloud)
                
            case "ManagedActionProperty_ManagedActionProperty_":
                let property = managedObject as! ManagedActionProperty
                let node = property.node
                let name = property.name
                let object = property.object
                self.delegate?.graphWillDeleteActionProperty?(self, action: Action(managedNode: node), property: name, value: object, fromCloud: fromCloud)
                
            case "ManagedRelationship_ManagedRelationship_":
                self.delegate?.graphWillDeleteRelationship?(self, relationship: Relationship(managedNode: managedObject as! ManagedRelationship), fromCloud: fromCloud)
                
            case "ManagedRelationshipGroup_ManagedRelationshipGroup_":
                let group = managedObject as! ManagedRelationshipGroup
                let node = group.node
                let name = group.name
                self.delegate?.graphWillRemoveRelationshipFromGroup?(self, relationship: Relationship(managedNode: node), group: name, fromCloud: fromCloud)
            
            case "ManagedRelationshipProperty_ManagedRelationshipProperty_":
                let property = managedObject as! ManagedRelationshipProperty
                let node = property.node
                let name = property.name
                let object = property.object
                self.delegate?.graphWillDeleteRelationshipProperty?(self, relationship: Relationship(managedNode: node), property: name, value: object, fromCloud: fromCloud)
            
            default:
                assert(false, "[Graph Error: Graph observed an object that is invalid.]")
            }
        }
    }
    

        }
        
        set.forEach { [unowned self] (managedObject: NSManagedObject) in
            guard "ManagedEntity_ManagedEntity_" == String.fromCString(object_getClassName(managedObject))! else {
                return
            }
            self.delegate?.graphDidInsertEntity?(self, entity: Entity(managedNode: managedObject as! ManagedEntity), fromCloud: fromCloud)
        }
        
        set.forEach { [unowned self] (managedObject: NSManagedObject) in
            guard "ManagedEntityGroup_ManagedEntityGroup_" == String.fromCString(object_getClassName(managedObject))! else {
                return
            }
            let group = managedObject as! ManagedEntityGroup
            let node = group.node
            let name = group.name
            self.delegate?.graphDidAddEntityToGroup?(self, entity: Entity(managedNode: node), group: name, fromCloud: fromCloud)
        }
        
        set.forEach { [unowned self] (managedObject: NSManagedObject) in
            guard "ManagedEntityProperty_ManagedEntityProperty_" == String.fromCString(object_getClassName(managedObject))! else {
                return
            }
            let property = managedObject as! ManagedEntityProperty
            let node = property.node
            let name = property.name
            let object = property.object
            self.delegate?.graphDidInsertEntityProperty?(self, entity: Entity(managedNode: node), property: name, value: object, fromCloud: fromCloud)
        }
        
        set.forEach { [unowned self] (managedObject: NSManagedObject) in
            guard "ManagedRelationship_ManagedRelationship_" == String.fromCString(object_getClassName(managedObject))! else {
                return
            }
            self.delegate?.graphDidInsertRelationship?(self, relationship: Relationship(managedNode: managedObject as! ManagedRelationship), fromCloud: fromCloud)
        }
        
        set.forEach { [unowned self] (managedObject: NSManagedObject) in
            guard "ManagedRelationshipGroup_ManagedRelationshipGroup_" == String.fromCString(object_getClassName(managedObject))! else {
                return
            }
            let group = managedObject as! ManagedRelationshipGroup
            let node = group.node
            let name = group.name
            self.delegate?.graphDidAddRelationshipToGroup?(self, relationship: Relationship(managedNode: node), group: name, fromCloud: fromCloud)
        }
        
        set.forEach { [unowned self] (managedObject: NSManagedObject) in
            guard "ManagedRelationshipProperty_ManagedRelationshipProperty_" == String.fromCString(object_getClassName(managedObject))! else {
                return
            }
            let property = managedObject as! ManagedRelationshipProperty
            let node = property.node
            let name = property.name
            let object = property.object
            self.delegate?.graphDidInsertRelationshipProperty?(self, relationship: Relationship(managedNode: node), property: name, value: object, fromCloud: fromCloud)
        }
        
        set.forEach { [unowned self] (managedObject: NSManagedObject) in
            guard "ManagedAction_ManagedAction_" == String.fromCString(object_getClassName(managedObject))! else {
                return
            }
            self.delegate?.graphDidInsertAction?(self, action: Action(managedNode: managedObject as! ManagedAction), fromCloud: fromCloud)
        }
        
        set.forEach { [unowned self] (managedObject: NSManagedObject) in
            guard "ManagedActionGroup_ManagedActionGroup_" == String.fromCString(object_getClassName(managedObject))! else {
                return
            }
            let group: ManagedActionGroup = managedObject as! ManagedActionGroup
            let node = group.node
            let name = group.name
            self.delegate?.graphDidAddActionToGroup?(self, action: Action(managedNode: node), group: name, fromCloud: fromCloud)
        }
        
        set.forEach { [unowned self] (managedObject: NSManagedObject) in
            guard "ManagedActionProperty_ManagedActionProperty_" == String.fromCString(object_getClassName(managedObject))! else {
                return
            }
            let property = managedObject as! ManagedActionProperty
            let node = property.node
            let name = property.name
            let object = property.object
            self.delegate?.graphDidInsertActionProperty?(self, action: Action(managedNode: node), property: name, value: object, fromCloud: fromCloud)
        }
    }
    
