NSOutlineView, using item: AnyObject

I'm creating a NSOutlineView. When implementing the Data Source, although I'm able to create the top hierarchy I can not implement the childHierarchy. The reason is that I can't read the item: AnyObject? which prevents me from returning the right array from the dictionary.


    var outlineTopHierarchy = ["COLLECT", "REVIEW", "PROJECTS", "AREAS"]
    var outlineContents = ["COLLECT":["a","b"], "REVIEW":["c","d"],"PROJECTS":["e","f"],"AREAS":["g","h"]]

    func childrenForItem (itemPassed : AnyObject?) -> Array<String>{
        var childrenResult = Array<String>()
        if(itemPassed == nil){ /
            childrenResult = outlineTopHierarchy
        }else{ /
        
            /HERE IS THE ISSUE, NEED TO FIND ITS TITLE to call the correct child. CURRENTLY hardcoded collect.
        
            childrenResult = outlineContents["COLLECT"]!
        }
        return childrenResult
    }


    /
    func outlineView(outlineView: NSOutlineView, child index: Int, ofItem item: AnyObject?) -> AnyObject{
        return childrenForItem(item)[index]
    }

    func outlineView(outlineView: NSOutlineView, isItemExpandable item: AnyObject) -> Bool{
        if(outlineView.parentForItem(item) == nil){
            return true
        }else{
            return false
        }
    }

    func outlineView(outlineView: NSOutlineView, numberOfChildrenOfItem item: AnyObject?) -> Int{
        return childrenForItem(item).count
    }


    func outlineView(outlineView: NSOutlineView, viewForTableColumn: NSTableColumn?, item: AnyObject) -> NSView? {
    
        /
        if (outlineTopHierarchy.contains(item as! String)) {
            let resultTextField = outlineView.makeViewWithIdentifier("HeaderCell", owner: self) as! NSTableCellView
            resultTextField.textField!.stringValue = item as! String
            return resultTextField
        }else{
            /
            let resultTextField = outlineView.makeViewWithIdentifier("DataCell", owner: self) as! NSTableCellView
            resultTextField.textField!.stringValue = item as! String
            return resultTextField
        }
    }
}



I used this as a reference, although it's Objective-C implemented

Accepted Reply

Here's code that works in case someone find this thread in the future:


   func childrenForItem (itemPassed : AnyObject?) -> Array<String>{
        if let item = itemPassed {
            let item = item as! String
            return outlineContents[item]!
        } else {
            return outlineTopHierarchy
        }
   }

Replies

Here's code that works in case someone find this thread in the future:


   func childrenForItem (itemPassed : AnyObject?) -> Array<String>{
        if let item = itemPassed {
            let item = item as! String
            return outlineContents[item]!
        } else {
            return outlineTopHierarchy
        }
   }