Here’s something puzzling, unless I’m missing the obvious:

I’m intending to convert an outline view in an existing xib file from 
cell-based to view-based. In preparation, I added the requisite delegate method 
to the view controller:

> - (NSView*) outlineView: (NSOutlineView*) outlineView viewForTableColumn: 
> (NSTableColumn*) column item: (id) item {
>       if (!item || !column)
>               return nil;
>       NSTableCellView* view = [outlineView makeViewWithIdentifier: 
> column.identifier owner: self];
>       if (!view)
>               return nil;
>       return view;
> }

without changing the outline view itself. Somewhat to my surprise, this 
delegate method *was* called for the outline view, and had the effect of 
causing all of the cells to display no value. I repeat: the outline view was 
still cell-based at this stage.

(The reason I tried this is that I first attempted to add a view-based outline 
view above the original, so I could compare the results. I needed the delegate 
method for the new view, but it was called for both views. So I started over, 
as described above.)

So that’s weird problem #1: surely this delegate method shouldn’t be called for 
a cell-based outline view? Incidentally, the backtrace at the delegate method 
looks like this:

>     frame #1: 0x00007fff94d84934 AppKit`-[NSTableView(NSTableViewViewBased) 
> makeViewForTableColumn:row:] + 77
>     frame #2: 0x00007fff94d83c67 AppKit`-[NSTableRowData 
> _addViewToRowView:atColumn:row:] + 305
>     frame #3: 0x00007fff94d8399a AppKit`-[NSTableRowData 
> _addViewsToRowView:atRow:] + 191
>     frame #4: 0x00007fff94d80a8e AppKit`-[NSTableRowData 
> _addRowViewForVisibleRow:withPriorView:] + 421
>     frame #5: 0x00007fff94d8080c AppKit`-[NSTableRowData 
> _addRowViewForVisibleRow:withPriorRowIndex:inDictionary:withRowAnimation:] + 
> 278
>     frame #6: 0x00007fff94d7f8d6 AppKit`-[NSTableRowData 
> _unsafeUpdateVisibleRowEntries] + 1640
>     frame #7: 0x00007fff94d7f16c AppKit`-[NSTableRowData 
> updateVisibleRowViews] + 230
>     frame #8: 0x00007fff94d7ed94 AppKit`-[NSTableView layout] + 165

which looks odd. But even if a cell-based outline view is (now in Mavericks) 
using a view-based table view under the hood, it shouldn’t be calling this 
delegate method, should it?

OK, ignoring that and moving on, I deleted the old outline view, added a new 
one, and set it to “view-based”. Now, I find that the result of creating the 
cell view in the delegate method:

>       NSTableCellView* view = [outlineView makeViewWithIdentifier: 
> column.identifier owner: self];

isn’t a NSTableCellView at all:

> (lldb) po view
> <NSView: 0x600000323b60>
> (lldb) po [view class]
> NSView
> (lldb) po [view objectValue]
> error: Execution was interrupted, reason: Attempted to dereference an invalid 
> ObjC Object or send it an unrecognized selector.
> The process has been returned to the state before expression evaluation.

That’s weird problem #2. The table cell view item in IB has the default class 
(“NSTableCellView” in gray) in the inspector, but the outline view is not 
creating a cell view of that class. Huh? The consequence is that I can’t get a 
value into the text field of the cell view.

Anyone know what’s going on here?




_______________________________________________

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

Reply via email to