On Nov 27, 2012, at 16:24 , Graham Cox <[email protected]> wrote:

> The problem is that as I iterate over the items being moved, this changes the 
> order, so the indexes get messed up, and the items end up in the wrong 
> places. I'm trying to work out how to compensate for the move but I must be 
> having a brainfade sort of day and can't get anything quite right, which is 
> why it's driving me round the bend.
> 
> Can anyone point me in the right direction?
> 
> Essentially my code is:
> 
> index = [items firstIndex];
> 
> while( index != NSNotFound )
> {
>       [table moveRowAtIndex:index toIndex:targetIndex];
> 
>       index = [items indexGreaterThanIndex:index];
> 
>       // do something to the index to make it right having moved the row I'm 
> iterating
> }
> 
> where <items> is the NSIndexSet containing the original selection being 
> dragged.

I assume you're using begin/endUpdates around this loop to have a single 
animation for the whole thing? In that case, it'd be a lot easier to use 
removeRowsAtIndexes/insertRowsAtIndexes, since the only index that needs to be 
adjusted is targetIndex (it needs to be decreased by the number of indexes in 
items that are less than the original targetIndex). That is, you would adjust 
targetIndex after the removal and before constructing the index set for the 
insertion.

If you really want to loop doing moveRowAtIndex, then you'd have to adjust 
targetIndex and every unused index in items, after every step of the move. It's 
probably not so very hard, but I doubt that anything short of a hit of a 
mind-altering drug is gonna make it fun to do.


_______________________________________________

Cocoa-dev mailing list ([email protected])

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 [email protected]

Reply via email to