• Open Menu Close Menu
  • Apple
  • Shopping Bag
  • Apple
  • Mac
  • iPad
  • iPhone
  • Watch
  • TV
  • Music
  • Support
  • Search apple.com
  • Shopping Bag

Lists

Open Menu Close Menu
  • Terms and Conditions
  • Lists hosted on this site
  • Email the Postmaster
  • Tips for posting to public mailing lists
Re: -[NSTreeController moveNode:toIndexPath:] broken?
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: -[NSTreeController moveNode:toIndexPath:] broken?


  • Subject: Re: -[NSTreeController moveNode:toIndexPath:] broken?
  • From: Jonathan Fewtrell <email@hidden>
  • Date: Sun, 08 Feb 2009 10:07:49 +0000

I recently began exploring NSTreeController, but I'm experiencing
problems with its moveNode:toIndexPath:. It's new to Leopard, but
seems to be consistently moving nodes to incorrect indexes. There's a
previous list post about exactly this, but without replies. http://lists.apple.com/archives/cocoa-dev/2008/Sep/msg01635.html

The same thing happens with Apple's own sample code, SourceView! (http://developer.apple.com/samplecode/SourceView
)
-[BaseNode setChildren:] gets called twice for every time you move
something in the sidebar, once for removing the item from its previous
location, once for inserting it in the new location. When inserting,
the new item is always inserted _last_ among its siblings, no matter
what index you dropped it on. Items are correctly ordered in the
OutlineView itself, but the underlying model is incorrect, and thus
out of sync.


My experience is that this problem occurs at the top level, ie, where the node's proposed parent is nil. In that case I found that creating the index path with +indexPathWithIndex: produces the right result, whereas -indexPathByAddingIndex: gives the result you are seeing. So I put in a conditional statement as below, and it all seems to work fine.

- (BOOL)outlineView:(NSOutlineView *)outlineView
acceptDrop:(id <NSDraggingInfo>)info
item:(id)newParent
childIndex:(NSInteger)index
{
/*---Drop the dragged nodes such that 'newParent' (which may be nil) becomes their parent and 'index' the position (among their fellow children) of the first dragged node with the others immediately below it. */
NSIndexPath *dropPath;
NSInteger dropIndex;

dropIndex = ( index == NSOutlineViewDropOnItemIndex ) ? 0 : index;
dropPath = ( newParent ) ? [[newParent indexPath] indexPathByAddingIndex:dropIndex] : [NSIndexPath indexPathWithIndex:dropIndex];


	[treeController moveNodes:draggedNodes toIndexPath:dropPath];


Not sure if your situation is exactly the same, but I hope this helps. Jon _______________________________________________

Cocoa-dev mailing list (email@hidden)

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:
This email sent to email@hidden


  • Prev by Date: Re: IB v7.03 appears to corrupt an xib last generated by IB v7.02
  • Next by Date: Re: How to draw text with fade out effect?
  • Previous by thread: Re: -[NSTreeController moveNode:toIndexPath:] broken?
  • Next by thread: NSButton referencing outlet won't work?
  • Index(es):
    • Date
    • Thread