在Realm中存储订购

时间:2017-07-16 10:27:12

标签: ios uitableview realm

我有一个名为Restaurant的Realm对象。我目前正致力于支持iOS 11基于拖放的UITableView重新排序。现在,您将如何存储订购?我在下面写了这个函数。

- (void)tableView:(UITableView *)tableView performDropWithCoordinator:(id<UITableViewDropCoordinator>)coordinator {
    NSIndexPath *destinationIndexPath = [[NSIndexPath alloc] init];
    if (coordinator.destinationIndexPath != nil) {
        destinationIndexPath = coordinator.destinationIndexPath;
    } else {
        destinationIndexPath = [NSIndexPath indexPathForRow:[self.tableView numberOfRowsInSection:([self.tableView numberOfSections]-1)] inSection:([self.tableView numberOfSections]-1)];
    }

    for (int i = 0; i < [coordinator.items count]; i++) {
        id<UITableViewDropItem> item = [coordinator.items objectAtIndex:i];

        if (item.dragItem.localObject != nil) {
            Restaurant *restaurant = item.dragItem.localObject;
            restaurant.order = destinationIndexPath.row;
            [restaurant update];
            if (self.tableView.hasActiveDrag) {
                [self.restaurants removeObject: restaurant];
                [self.tableView deleteRowsAtIndexPaths:@[item.sourceIndexPath] withRowAnimation:UITableViewRowAnimationNone];
            }
            [self.restaurants insertObject:restaurant atIndex:destinationIndexPath.row];
            [self.tableView insertRowsAtIndexPaths:@[destinationIndexPath] withRowAnimation:UITableViewRowAnimationNone];
        }
    }
}

但是,当你对tableView重新排序几次时,你可以得到几个restaurant.order的相同整数。我得到了导致此问题的原因,但我不知道如何在不更新所有所有餐馆的情况下解决这个问题。有什么想法吗?

3 个答案:

答案 0 :(得分:2)

您不需要每次更新所有餐厅 - 您只需重新编号目的地和来源之间的

答案 1 :(得分:2)

Realm已经有一个有序的属性类型:List

使用此类型将保留排序,而无需在模型上存储索引顺序。

答案 2 :(得分:0)

您可以使用名为restaurant_order的列并初始设置为0.在成功拖放之后,您必须将所有项目顺序设置到领域中,并在获得结果时使用sortedResultsUsingProperty:@"restaurant_order"代码并设置所有餐馆列表。

希望它有所帮助...