reverseGeocodeLocationCompletionHandler 因“[TNSDictionaryAdapter 坐标]:无法识别的选择器发送到实例”而失败
reverseGeocodeLocationCompletionHandler fails with "[TNSDictionaryAdapter coordinate]: unrecognized selector sent to instance"
我正在开发将给定位置(纬度、经度)转换为最近的街道地址的代码,即反向地理编码。我在 this issue 上找到了声称有效的代码,并且在 Android 上进行了一些修改后,它确实有效。但是在 iOS,我无法超越对 reverseGeocodeLocationCompletionHandler 的调用。特别是,调用失败并显示错误消息“[TNSDictionaryAdapter 坐标]:无法识别的选择器发送到实例”
我创建了这个 Playground project 演示了错误。有两点需要注意:
- 引用代码为打字稿;我的项目是 javascript,所以我做了适当的更改
- 参考代码的位置参数是
args.location.ios
,但位置对象没有 .ios 属性,所以我看不出这是怎么回事。 (有 this issue 指出相同,但从未解决。)
所以,我的问题是如何从 Nativescript javascript 项目成功调用 reverseGeocodeLocationCompletionHandler。我下午的 google 搜索没有结果:-(
我想 API 在您提到的评论之后发生了变化。 iOS 属性意味着 return CLLocation
。最新版本的插件没有公开该方法,仅供内部使用。
解决方法是调用 distance(location1, location2)
方法,这样它会创建原始位置。
const geolocation = require("nativescript-geolocation");
...
var location = new geolocation.Location();
location.latitude = 40.7127837;
location.longitude = -74.00594130000002;
...
let geocoder = new CLGeocoder();
geolocation.distance(location, location);
console.log(location.ios);
geocoder.reverseGeocodeLocationCompletionHandler(
location.ios,
(placemarks, error) => {
if (error) {
...
} else if (placemarks) {
...
}
});
我正在开发将给定位置(纬度、经度)转换为最近的街道地址的代码,即反向地理编码。我在 this issue 上找到了声称有效的代码,并且在 Android 上进行了一些修改后,它确实有效。但是在 iOS,我无法超越对 reverseGeocodeLocationCompletionHandler 的调用。特别是,调用失败并显示错误消息“[TNSDictionaryAdapter 坐标]:无法识别的选择器发送到实例”
我创建了这个 Playground project 演示了错误。有两点需要注意:
- 引用代码为打字稿;我的项目是 javascript,所以我做了适当的更改
- 参考代码的位置参数是
args.location.ios
,但位置对象没有 .ios 属性,所以我看不出这是怎么回事。 (有 this issue 指出相同,但从未解决。)
所以,我的问题是如何从 Nativescript javascript 项目成功调用 reverseGeocodeLocationCompletionHandler。我下午的 google 搜索没有结果:-(
我想 API 在您提到的评论之后发生了变化。 iOS 属性意味着 return CLLocation
。最新版本的插件没有公开该方法,仅供内部使用。
解决方法是调用 distance(location1, location2)
方法,这样它会创建原始位置。
const geolocation = require("nativescript-geolocation");
...
var location = new geolocation.Location();
location.latitude = 40.7127837;
location.longitude = -74.00594130000002;
...
let geocoder = new CLGeocoder();
geolocation.distance(location, location);
console.log(location.ios);
geocoder.reverseGeocodeLocationCompletionHandler(
location.ios,
(placemarks, error) => {
if (error) {
...
} else if (placemarks) {
...
}
});