gpt4 book ai didi

ios - 在 UITableView 中重新排序 Realm 对象

转载 作者:行者123 更新时间:2023-11-29 01:15:53 25 4
gpt4 key购买 nike

我有一组 RLMObject 模型对象,代表用户的登录帐户可以在我的应用程序中管理。这些对象通过直接映射到 UITableView 来公开在应用程序中。

因为用户可以通过在 TableView 中,模型对象具有一个名为 orderedIndex 的属性,以便跟踪对象的当前顺序。

@interface Account : RLMObject

@property NSString *name;
@property NSInteger orderedIndex;

@end

TableView 数据源从 RLMResults 属性访问这些帐户父 View Controller 的成员

self.accounts = [[Account allObjects] sortedResultsUsingProperty:@"orderedIndex" ascending:YES];

(由于 Realm 对象是“实时的”,我永远不必手动重新加载或重置此对象。)

当用户对 TableView 的行重新排序时,所有的orderedIndex属性这些 Realm 对象的一部分需要更新以匹配。

可能有很多不同的方法可以做到这一点,有些比其他的更复杂,但什么是最简单的呢?

最佳答案

最初,我试图在确定哪些特定的 Realm 对象时聪明一点受到移动的影响,并且只修改了它们的 orderedIndex 值,但是这变成了有点复杂,在某些边缘情况下(通常涉及顶部和底部的对象),会导致不可预测的行为。

最终,我决定为了最终的简单性(以稍微多做一些工作为代价),我会只需将我的 self.accounts 对象的内容复制到可变数组,执行数组中的移动操作,然后简单的重建每个对象的orderedIndex从头开始。

- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(nonnull NSIndexPath *)sourceIndexPath toIndexPath:(nonnull NSIndexPath *)destinationIndexPath
{
if (sourceIndexPath.row == destinationIndexPath.row) {
return;
}

// Make a mutable copy of the accounts list
NSMutableArray *array = [NSMutableArray array];
for (Account *account in self.accounts) {
[array addObject:account];
}

// Re-order this array as dictated by the table view
Account *accountToMove = array[sourceIndexPath.row];
[array removeObject:accountToMove];
[array insertObject:accountToMove atIndex:destinationIndexPath.row];

// Loop through all of the items and reset their index value
[self.accounts.realm transactionWithBlock:^{
NSInteger i = 0;
for (Account *account in array) {
account.orderedIndex = i++;
}
}];
}

这最终完美地工作了。 :)

关于ios - 在 UITableView 中重新排序 Realm 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35193088/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com