         let id = rules[relation.getValue()].VIEW.getViewId()
 
         if id.viewId != 0 {
-            var node: Node = mDGraph.mKeyNodes.object(forKey: id)!
+            var node: Node? = mDGraph.mKeyNodes.object(forKey: id)
+
             if node == nil {
                 return nil
             }
 
-            var view: UIView = node.view!
+            var view: UIView = (node?.view)!
 
             while view.isHidden {
                 let l_rules: [BindViewWithRule] = (view.getLayoutParams() as! RelativeLayoutParams).getRules()
-                node = mDGraph.mKeyNodes.object(forKey: l_rules[relation.getValue()].VIEW.getViewId())!
+                node = mDGraph.mKeyNodes.object(forKey: l_rules[relation.getValue()].VIEW.getViewId())
                 if node == nil {
                     return nil
                 }
-                view = node.view!
+                view = (node?.view)!
             }
 
             return view

    }

    fileprivate class Node {
        var view: UIView?

        var dependents: NSMapTable = NSMapTable<Node, DependencyGraph>()


        }

        static func acquire(view: UIView) -> Node {
            var node: Node? = mPool.acquire()
            if node == nil {
                node = Node(view: view)
            } else {
                node!.view = view
            }
            return node!
        }
