0

我想将两个纬度相减以找到最短距离,但我收到此错误,“指向接口 'NSNumber' 的指针的算术运算,这在非脆弱 ABI 中不是恒定大小”如果我将 - 更改为+ 我得到一个不同的错误“二进制表达式的无效操作数('NSNumber *' 和 'NSNumber *')”我尝试过使用双精度数和许多事物的组合,但它不起作用。

NSNumber *userLatitude = [NSNumber numberWithDouble:43.55];//sample

NSArray *listOfCities = [managedObjectContext executeFetchRequest:request error:&error];
    for (CityList *item in listOfCities){
        NSLog(@"latitude is %@",item.latitude);  
        NSNumber *distanceLat =  userLatitude - item.latitude;

然后,我会将它们与经度一起插入到可变数组中并比较距离。使用 CLLocation 的一种可能解决方案是

double distance = [usersCurrentLoc distanceFromLocation:otherLoc];

其中 usersCurrentLoc 和 otherLoc 都是 CLLocation 变量。我还想单独使用纬度和经度,这样我就可以进行一些自定义绘图,而且它们也单独存储,所以我想找出正确的数据类型和最有效的解决方案。

item.latitude 来自 core-data,数据模型类型为 double,X-code 自动生成 CityList 类,属性为 NSNumber * latitude;

4

3 回答 3

1

如果你想减去两个NSNumbers,然后使用这个

NSNumber *distanceLat = [NSNumber numberWithFloat:([userLatitude floatValue] - [item.latitude floatValue])];
于 2013-11-14T05:12:17.620 回答
0

这:

NSNumber *distanceLat =  userLatitude - item.latitude;

需要是:

NSNumber *distanceLat = @([userLatitude doubleValue] - item.latitude);

If item.latitudeis also an NSNumberthen 你也需要调用doubleValue它。

NSNumber是一个对象。你不能对物体做数学运算。您需要使用doubleValue它来获取它的值,然后您需要将结果包装在一个新NSNumber实例中。

顺便说一句 - 为什么要在NSNumber这里打扰?为什么不这样做:

double userLatitude = 43.55;

double distanceLat = userLatitude - item.latitude;
于 2013-11-14T05:10:49.557 回答
0
    CLLocationCoordinate2D newCoordinate = [newLocation coordinate];
    CLLocationCoordinate2D oldCoordinate = [oldLocation coordinate];

CLLocationDistance 米 = [newLocation distanceFromLocation:oldLocation];

以上可用于查找两个位置之间的距离

于 2013-11-14T06:27:54.443 回答