On Jan 25, 2015, at 6:07 PM, Roland King <r...@rols.org> wrote: > >> On 25 Jan 2015, at 23:15, Keary Suska <cocoa-...@esoteritech.com> wrote: >> >> On Jan 25, 2015, at 3:34 AM, Roland King <r...@rols.org> wrote: >> >>> I have a xib with a top-level view and a bunch of subviews which represents >>> one view of a given model object. The top-level NSView subclass has a >>> readwrite property which is the model object of which it's a view. I >>> thought this was a pretty standard pattern, especially in OSX which only >>> just recently started to really make use of view controllers. >> >> There is nothing standard about this pattern. It is not, AFAIK, a pattern at >> all, but an anti-pattern. Previous to a view controller the only "view" >> controller was a window controller, and finer grained control was necessary. >> For this very purpose it is the view controller, and not its view, which >> tends to "hold" the model object. Hence Xcode is balking at your attempts. >> > > And yet I was certain I'd stolen it from somewhere, and woke up remembering > where. NSTableCellView, is a view, has an objectValue property. When you drag > an NSTableCellView into IB and add subviews to it, the bindings inspector > dropdown for those subviews includes the table cell view, called something > like XXX Cell View. So you bind to 'XXX cell view' with path > 'objectValue.someProperty'. The NSTableCellView is really the VC and > objectValue is the model object.
Of course--in this case, NSTableCellView is really just acting as an intermediary for its subviews. In a way, the subviews are really binding *through* NSTableCellView , although it is hiding those implementation details. That may be what you are after but it didn't seem to be what you were describing. > What I have is a direct rip off of that pattern. I've embedded a stack view > in a class and given it a datasource which serves up NSView subclasses for an > item at a given index, you can register a nib against an identifier and ask > the class to create you a new view or give you a reused one. The method names > are even stolen pretty much straight from NSTableView. It's like an > NSTableView or a NSOutlineView in usage, just uses a stack view under the > hood (because stack view uses autolayout and this makes dynamic row sizing > etc super easy when you have rows which use autolayout). IB however knows > about NSTableCellViews and adds them into the bindings inspector dropdown for > their subviews, it doesn't know about my top-level view class, > RKStackCellView, and doesn't. > > I can add them in awakeFromNib pretty easily, do in code what IB does for > NSTableCellViews graphically, or I could change my datasource method from > returning an NSView*, like NSTableView's does, to returning a view > controller, and then keep track of the VCs and their associated views in my > stack view using class, as the stack view only wants the NSView but I'd need > to keep the VCs referenced somehow to stop them being deallocated. I'll try > them both, see which one I like best. You can do what you want, you would just have to manage the bindings programmatically. It still seems easier to me--and possibly saner--for each view to have a VC that holds the model, and to which the subviews are bound. HTH, Keary Suska Esoteritech, Inc. "Demystifying technology for your home or business" _______________________________________________ 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