在 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?