在 CoreData 中使用 NSOrderedSet 重新排序 UITableView
Posted
技术标签:
【中文标题】在 CoreData 中使用 NSOrderedSet 重新排序 UITableView【英文标题】:Reordering UITableView with NSOrderedSet in CoreData 【发布时间】:2011-11-12 19:56:19 【问题描述】:有没有人有使用 NSOrderedSet 在 UITableView 中排序的示例代码?
看过很多关于重排序的文章,但还是不明白如何在 ios5 中做到这一点。
【问题讨论】:
***.com/questions/2360938/… 这很有帮助,但是... 【参考方案1】:您好,我是这样实现的。 “currentObject”是关系的根对象,“subItems”是模型中有序关系的名称,由 UITableViewController 管理。
- (void)moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath
NSMutableOrderedSet* orderedSet = [self.currentObject mutableOrderedSetValueForKey:@"subItems"];
NSInteger fromIndex = fromIndexPath.row;
NSInteger toIndex = toIndexPath.row;
// see http://www.wannabegeek.com/?p=74
NSIndexSet *indexes = [NSIndexSet indexSetWithIndex:fromIndex];
if (fromIndex > toIndex)
// we're moving up
[orderedSet moveObjectsAtIndexes:indexes toIndex:toIndex];
else
// we're moving down
[orderedSet moveObjectsAtIndexes:indexes toIndex:toIndex-[indexes count]];
[self.dataStore saveObjectContext];
【讨论】:
嗨@Stephan,我正在使用 FRC 如何使用 FRC 来做到这一点 嗨@Ranjit 据我所知,NSFetchedResultController 无权访问 NSMutableOrderedSet 的任意顺序。我的意思是现在有办法获取它。您可以获取根对象,但我想这不是您想要的。因此,我在使用 FRC 属性解决方案而不是有序关系的项目中使用。第二个缺点是恕我直言,iCloud 还不支持 NSMutableOrderedSet。 嗨@Stephan,如果我们使用一个属性来维护项目的顺序,那么假设我有 100 个项目并且我删除了任何中间项目,我必须重新计算 order 属性值并这样做每次都会很头疼 @Ranjit 这取决于你如何实现它。但这是这个问题的主题。看看我在***.com/questions/1077568 中的回答和我的参考实现以上是关于在 CoreData 中使用 NSOrderedSet 重新排序 UITableView的主要内容,如果未能解决你的问题,请参考以下文章
在 TodayExtension 中使用 MagicalRecord (CoreData)
如何在 SwiftUI 中使用 CoreData 更改数据值?
在 NSFetchedResultsController 中使用 Predicate 与 CoreData 进行日期比较
在 Swift 中使用 NSPredicate 对 CoreData 结果进行排序
在 tableViewController 中使用重新加载的 CoreData
使用 CoreData 在 UITableViewController 中搜索:获取第二个 NSFetchedResultsController?