views:

38

answers:

1

I have a list view class that just like NSCollectionView requires an additional prototype item and a prototype view to be of any use. When dropping an NSCollectionView from the library in Interface Builder those two helper items are automatically created. However I couldn't find a single official Apple document dealing with this use case (describing how its done).

Digging thru the Apple Dev Guides I could however find "ibDidAddToDesignableDocument:".
With the following code I managed to get my auxiliary items created on drop from library:

- (void)ibDidAddToDesignableDocument:(IBDocument *)document {
    [super ibDidAddToDesignableDocument:document];

    NSView *prototypeView = [[[NSView alloc] initWithFrame:NSMakeRect(0.0, 0.0, 300, 65.0)] autorelease];
    DLListViewItem *prototypeViewItem = [[[DLListViewItem alloc] initWithNibName:nil bundle:nil] autorelease];

    [document addObject:prototypeViewItem toParent:nil];
    [document addObject:prototypeView toParent:nil];

    [document connectOutlet:@"view" ofSourceObject:prototypeViewItem toDestinationObject:prototypeView];
    [document connectOutlet:@"listView" ofSourceObject:prototypeViewItem toDestinationObject:self];
    [document connectOutlet:@"prototypeItem" ofSourceObject:self toDestinationObject:prototypeViewItem];
}

However…

IB adds those aux items for NSCollectionView only on the actual initial drag from the library, not on any other call of "ibDidAddToDesignableDocument:", such as when embedding, copying or duplicating the item. (while my method would, and on all)

This makes me wonder whether Apple actually uses "ibDidAddToDesignableDocument:" for this and if I'm on the right track with this at all.

How does one imitate this properly? I'm having a hard time trying to distinguish between different contexts for "ibDidAddToDesignableDocument:". Anybody successfully done this?
Unfortunately none of Google, Google Code, GitHub, or the documentation revealed anything helpful, so I'm in desperate need of help here. :(

Thanks in advance!

Edit: Oh great, this question just brought me the tumbleweed badge, yay! Not.
I'm more into useful answers actually, but thanks anyway ;)

A: 

I struggled with this on a plugin I did myself a while ago. In my case I was able to check a property of the object to see if it had been initialized already and skip adding the auxilliary objects in that case. I believe BWToolkit uses some internal checking that is similar. Couldn't you check your object's 'prototypeItem' property to see if you need to skip creating your aux objects?

Sean Rich
Uh, that hurt. No, it really did. :( *head->desk* Thanks, your last suggestion worked out flawlessly :)
Regexident