我有一个UITableViewController,它显示来自我的NSFetchedResultsController的行。我有几个部分,每个部分中的行都是使用“订单”字段排序的。
我使用相当bog标准的代码来处理行的移动。行移动仅限于它们包含的部分。当行重新排列时,我使用以下代码..
- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath *)destinationIndexPath
{
self.fetchedResultsController.delegate = nil;
NSMutableArray *myImages = [[self.fetchedResultsController fetchedObjects] mutableCopy];
// Grab the item we're moving.
NSManagedObject *myImage = [[self fetchedResultsController] objectAtIndexPath:sourceIndexPath];
// Remove the object we're moving from the array.
[myImages removeObject:myImage];
// Now re-insert it at the destination.....here lies the problem???
[myImages insertObject:myImage atIndex [destinationIndexPath row]];
// All of the objects are now in their correct order. Update each
// object's displayOrder field by iterating through the array.
int i = 0;
for (MyImage *myImage in myImages)
{
myImage.order = [NSNumber numberWithInt:i];
i++;
}
// Save the data here!
self.fetchedResultsController.delegate = self;
}
(一些变量名称已被更改以保护无辜!!!)
这很有效,但并不总是按预期执行。原因(我认为)是我正在成功地从数组中删除对象,但是再次插入是错误的,因为它使用整个数组的绝对行索引,而不允许这可能在(例如) UITableView / NSFetchedResultsController的第二或第三部分。
那么,在目标indexPath是二维的情况下,如何将一个对象放回我的可变数组(线性)到我的正确索引中? (我可能会计算以前的行/部分),但想知道是否有更漂亮的方式。)
由于