Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/94.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iOS-重新排序CoreData中的项目_Ios_Objective C_Arrays_Uitableview_Core Data - Fatal编程技术网

iOS-重新排序CoreData中的项目

iOS-重新排序CoreData中的项目,ios,objective-c,arrays,uitableview,core-data,Ios,Objective C,Arrays,Uitableview,Core Data,我有一个表视图和一个数组locationsArray。位置数组在my CoreData中的数据的viewDidLoad上填充 我已经在tableView上实现了重新排序方法,这很好,但是我不知道如何将重新排序的数组保存回CoreData。我试着删除CoreData中的所有内容,然后保存新的重新排序Darray。虽然这显然是非常昂贵的资源,但它似乎只是以看似随机的顺序将元素加载回数组中 有没有一种简单的方法可以做到这一点,我没有,或者您不能以特定的顺序在CoreData中存储东西 严格地说,不可能

我有一个表视图和一个数组
locationsArray
。位置数组在my CoreData中的数据的
viewDidLoad
上填充

我已经在tableView上实现了重新排序方法,这很好,但是我不知道如何将重新排序的数组保存回CoreData。我试着删除CoreData中的所有内容,然后保存新的重新排序Darray。虽然这显然是非常昂贵的资源,但它似乎只是以看似随机的顺序将元素加载回数组中


有没有一种简单的方法可以做到这一点,我没有,或者您不能以特定的顺序在CoreData中存储东西

严格地说,不可能按一定的顺序存储对象。只能设置检索对象的顺序

当您从CoreData检索
locationsArray
时,您对它们的顺序没有任何保证。 唯一的方法是向托管对象中添加字段,该字段将用于为您的位置排序

然后,在检索时,您将能够使用
locationsArray=[locationsArray sortedarraying]


您还可以通过使用NSFetchRequest的属性来实现这一点。它将为您提供所需的行为。唯一的缺点是,在这种情况下,NSSortDescriptor不能按块定义,因此如果排序使用的是某种复杂的方法,则需要使用已获取的数据对结果进行排序

使用
谓词对数组进行排序,或者在从coredata获取数组后使用

 NSArray *sortedlocationarray = [filteredlocationarray sortedArrayUsingDescriptors:@[sortDescriptor]];

filteredlocationarray来自coredata的位置。

随机顺序更快,因此如果需要保留顺序,请使用有序关系或添加用于排序(比较)的属性。这样我就可以创建自己的有序集了?你知道这到底是如何工作的吗?如果一个关系适合你的数据模型,启用“Ordered”复选框,Xcode将为你生成一个有序的集合方法(有几个已知的老问题,我相信你可以使用搜索快速解决)。否则,可以使用附加属性进行比较,与
NSSortDescriptor
NSFetchRequest
的sortDescriptors数组一起使用,它不需要重大的模型更改,但您必须手动维护新属性(跟踪最小/最大值,插入或删除元素时进行批量更新等).我明白了,所以出于我的目的,我不想对它们本身进行排序,但让用户选择核心数据的顺序是不可能的?您希望在从核心数据检索时对它们进行排序。因此,您需要存储信息以应用排序。然后,当用户更改表视图中的顺序时,您将更改此“排序信息”。下次(下次启动)你从核心数据中获取数据-你以用户定义的顺序获取数据好的,我明白你的意思,你知道如何存储/创建“排序信息”吗?例如,简单的计算就足够了-0,1,2,…另一个选项,使用顺序关系:我想你误解了这个问题。我不是在尝试对数组排序。处理每个位置ay项作为模型,使用enumerateObjectsUsingBlock具有属性顺序您可以为每个项设置顺序并保存上下文