NSManagedObject自定义getter不适用于NSSortDescriptor

时间:2017-05-15 23:30:11

标签: objective-c core-data nsmanagedobject nssortdescriptor

我有NSManagedObject我要覆盖其中一个属性的getter,因为我想对该属性的返回值进行一些计算:

- (NSNumber *)distanceFromCurrentUserLocation {

    [self willAccessValueForKey:@"distanceFromCurrentUserLocation"];

    // Update Distance
    CLLocation *placeLocation = [[CLLocation alloc] initWithLatitude:self.coordinate.latitude longitude:self.coordinate.longitude];
    CLLocation *currentLocation = [[MyHelper sharedService] currentLocation];

    CLLocationDistance distance = [placeLocation distanceFromLocation:currentLocation];

    [self didAccessValueForKey:@"distanceFromCurrentUserLocation"];

    return @(distance);

}

然后我执行获取请求并设置sortDescriptors

// Initialize Fetch Request
NSFetchRequest *request = [[NSFetchRequest alloc] initWithEntityName:@"ZSSCDPerson"];

// Sorting
[request setSortDescriptors:@[[NSSortDescriptor sortDescriptorWithKey:@"distanceFromCurrentUserLocation" ascending:ascending]]];

排序描述符不会调用此方法吗?

1 个答案:

答案 0 :(得分:0)

您无法对非存储值进行获取请求。

您有两种选择。

  1. 计算并存储该值,您需要在当前用户位置发生变化时随时更新。可能不适合用户位置变化很大的东西。

  2. 获取然后排序。将所有对象提取到数组中,然后在内存中排序。