Binding view-based NSOutlineView to Core Data

前端 未结 4 787
栀梦
栀梦 2021-01-31 11:26

I\'m trying to implement the new view-based OutlineView as a source list in my Mac app. I can\'t get values to display, though, so I made a small test app from the Core Data app

4条回答
  •  我在风中等你
    2021-01-31 12:08

    Wow, it's like me from two weeks ago is asking this question.

    Anyway, if you're anything like me, the problem is that,
    for view-based NSOutlineViews, you need to implement the

    - (NSView *)outlineView:(NSOutlineView *)outlineView
         viewForTableColumn:(NSTableColumn *)tableColumn
                       item:(id)item;
    

    delegate method and return the NSTableCellView you set up,
    or they'll just give you a blank line. The easiest way to do this is to just call

    [outlineView makeViewWithIdentifier:@"MyCell" owner:self]
    

    replacing MyCell with whatever you typed in as the "User Interface Item Identifier"
    in the Identity Inspector for your NSTableCellView.

    Objective-C:

    - (NSView *)outlineView:(NSOutlineView *)outlineView viewForTableColumn:(NSTableColumn *)tableColumn item:(id)item {
       return [outlineView makeViewWithIdentifier:@"MyCell" owner:self];
    }
    

    Swift:

    func outlineView(_ outlineView: NSOutlineView, viewFor tableColumn: NSTableColumn?, item: Any) -> NSView? {
        return outlineView.makeView(withIdentifier: NSUserInterfaceItemIdentifier("MyCell"), owner: self)
    }
    

    UPDATE 2018-08-02:

    Actually, you don't need to set the delegate. Here is how I got it working (tested with NSTreeController, but should work with NSArrayController as well):

    • Bind each column object to arrangedObjects (without Model Key Path)
    • Bind the inner-most custom view (e.g., label field) to objectValue.yourCustomValue
    • Shouldn't be necessary but if this doesn't work try setting the identifier for the column and for the TableCellView. Make sure both identifiers are identical. Repeat that for the remaining columns with different identifiers.

    Screenshot: Bindings for View Based NSOutlineView

提交回复
热议问题