Quincey, Thanks for the reply.
At the time of my original posting I had verified several times that all the protocol functions got called and were returning the values I expected them to return. The objectValueForTableColumn one was returning a String, the title I hoped would appear in the outline. Following Ken’s advice, I changed that method to return the node itself, not its title, and tried changing a binding to read the title. It appears messing with the bindings perturbed the system somehow: now the objectValueForTableColumn method doesn’t seem to ever get called. The protocol has four methods, and the other three still do get called and return the values I expect. That’s a long answer to your question about whether the method ever gets called. In summary: it was once called and returned a good String value; now it would return a good DocumentNode object from which the String title could be retrieved, but it isn’t called for some reason; and either way, there’s no visible difference in the running app. I still get a fully populated document tree where each node’s title is blank. Here is my Document object’s current code. For brevity I have cut out the boilerplate methods generated by Xcode and not yet modified by me. import Cocoa class Document: NSDocument, NSOutlineViewDataSource { @IBOutlet weak var theOutlineView: NSOutlineView! var theProject: DocumentNode override init() { // Swift requires local properties to be initialized first theProject = DocumentNode.CreateSampleProject() super.init() } func getDocumentNodeFrom( obj: AnyObject! ) -> DocumentNode { if let node = obj as? DocumentNode { return node } else { return self.theProject } } func outlineView( nsov: NSOutlineView!, child index: Int, ofItem item: AnyObject! ) -> AnyObject! { let node = getDocumentNodeFrom( item ) let result = node.children[ index ] return result } func outlineView( nsov: NSOutlineView!, isItemExpandable item: AnyObject! ) -> Bool { let count = outlineView( nsov, numberOfChildrenOfItem: item ) let result = count > 0 return result } func outlineView( nsov: NSOutlineView!, numberOfChildrenOfItem item: AnyObject! ) -> Int { let node = getDocumentNodeFrom( item ) let result = node.children.count return result } func outlineView( nsov: NSOutlineView!, objectValueForTableColumn tableColumn: NSTableColumn!, byItem item: AnyObject! ) -> AnyObject! { let node = getDocumentNodeFrom( item ) return node } } — Charles Jenkins On Tuesday, September 9, 2014 at 15:28, Quincey Morris wrote: > Actually, I was wrong. Because the protocol has the underscore (followed by a > space to separate it from the parameter name), it doesn’t matter what you use > for your parameter name in your declaration — _outlineView, outlineView and > xxx would all have been fine. > > However, your solution to the problem (the warning message, that is) was > pretty lousy. It wasn’t the space that was extraneous, it was the underscore, > and the natural solution would be to remove the underscore. (That is, unless > you *like* having variable name start with an underscore.) > > Back to the original problem, assuming you haven’t already found what’s wrong: > > You need to approach this systematically. Is the method called at all? Does > ‘getDocumentNodeFrom’ return a non-nil value? What is the actual value of the > ‘title’ property? > > _______________________________________________ Cocoa-dev mailing list (Cocoa-dev@lists.apple.com) Please do not post admin requests or moderator comments to the list. Contact the moderators at cocoa-dev-admins(at)lists.apple.com Help/Unsubscribe/Update your Subscription: https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com This email sent to arch...@mail-archive.com