I was getting a crash in my app when dragging to a section the row was not allowed to move to. adaptedIndexPathForRowAtIndexPath was returning 2,3 when it was passed 2,2. However, the last data available was 2,2. When I changed this line of code, it worked correctly.
According to your 2. comment, shouldn't it be:
if (![self movingIndexPath] || [self movingIndexPath].section != indexPath.section) { return indexPath; }
I was getting a crash in my app when dragging to a section the row was not allowed to move to. adaptedIndexPathForRowAtIndexPath was returning 2,3 when it was passed 2,2. However, the last data available was 2,2. When I changed this line of code, it worked correctly.