我有一个名为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的相同整数。我得到了导致此问题的原因,但我不知道如何在不更新所有所有餐馆的情况下解决这个问题。有什么想法吗?
答案 0 :(得分:2)
您不需要每次更新所有餐厅 - 您只需重新编号目的地和来源之间的
答案 1 :(得分:2)
Realm已经有一个有序的属性类型:List
使用此类型将保留排序,而无需在模型上存储索引顺序。
答案 2 :(得分:0)
您可以使用名为restaurant_order的列并初始设置为0.在成功拖放之后,您必须将所有项目顺序设置到领域中,并在获得结果时使用sortedResultsUsingProperty:@"restaurant_order"
代码并设置所有餐馆列表。
希望它有所帮助...