Ios NSSortDescriptor,带有使用实际对象而非键值的比较器
我在CoreDataIos NSSortDescriptor,带有使用实际对象而非键值的比较器,ios,objective-c,core-data,nssortdescriptor,Ios,Objective C,Core Data,Nssortdescriptor,我在CoreDataMyObject中有一个实体,它具有属性纬度和经度 我想使用NSFetchedResultsController执行一次提取,该控制器根据MyObject距离用户当前位置的距离对提取进行排序 但是,我不知道在排序描述符的键中放入什么 我不想比较对象的特定键。我想比较对象本身 我不确定在不重新填充记录的“距离”字段的情况下,我怎么可能做到这一点 我正在尝试使用这个代码 [[NSSortDescriptor alloc] initWithKey:@"." ascending:YE
MyObject
中有一个实体,它具有属性纬度
和经度
我想使用NSFetchedResultsController
执行一次提取,该控制器根据MyObject
距离用户当前位置的距离对提取进行排序
但是,我不知道在排序描述符的键中放入什么
我不想比较对象的特定键。我想比较对象本身
我不确定在不重新填充记录的“距离”字段的情况下,我怎么可能做到这一点
我正在尝试使用这个代码
[[NSSortDescriptor alloc] initWithKey:@"." ascending:YES comparator:^NSComparisonResult(MyObject *object1, MyObject *opject2) {
// stuff here
}];
但由于内存压力(lol),应用程序崩溃
显然,使用@“
是不正确的,但有没有办法做到这一点
或者有没有更好的方法使用不同的方法来实现这一点?如果您不想按对象的键对对象进行排序,而是要对对象本身进行排序,那么您不应该使用排序描述符。只需获取结果的数组,然后对该数组进行排序。当然,为了做到这一点,您的自定义对象MyObject应该实现isEqual
另一种选择是向MyObject添加一个名为distance
的新键,然后将其用作排序描述符的键
从CoreData为MyObject实体创建NSFetchRequest
executeFetchRequest
获取数据库中的所有位置李>
迭代MyObject数组,并通过计算currentLocation和MyObject位置(lat,long)之间的距离来填充distance属性
将在1中创建的提取请求的sortDescriptor设置为distance
使用此提取请求创建FRC并调用performFetch
使用FRC的获取对象
,该对象将根据距离
按顺序排序
希望这对你有用。是的,你的第二个解决方案可能就是我要做的。把它们全部取出来然后分类的问题是,它打破了使用fetchedresultscontroller的整个概念。实际上不是。原因是,由于当前位置可能会发生变化,您可能每次都必须计算距离。因此,您必须使用executeFetchRequest
获取所有现有(lat,long)对象。然后遍历这些对象并填充“距离”属性。然后创建一个获取结果控制器,使用距离作为排序描述符,并在FRC上调用performFetch
,以按距离获取排序结果,我想是这样的。我要么更新到核心数据中,在那里我必须获取它们全部,要么获取它们全部,然后对它们进行排序。好的,很酷,谢谢