Coredata和UITableViewController行重新排序

时间:2014-07-30 21:21:19

标签: ios uitableview core-data nsfetchedresultscontroller

我有一个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是二维的情况下,如何将一个对象放回我的可变数组(线性)到我的正确索引中? (我可能会计算以前的行/部分),但想知道是否有更漂亮的方式。)

由于

0 个答案:

没有答案