Iphone 处理geocodeAddressString的结果时出现无法识别的选择器错误
我正在尝试使用Iphone 处理geocodeAddressString的结果时出现无法识别的选择器错误,iphone,ios,clgeocoder,mkmapitem,Iphone,Ios,Clgeocoder,Mkmapitem,我正在尝试使用MKMapItem创建多个地点标记,而不使用坐标 我直接在GeocodeAddressString:@“Mumbai”中使用了位置名称,…但我得到了单个位置的结果 当我通过阵列使用多个位置时,我遇到以下错误: 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“-[\uu NSArrayI length]:未识别的选择器已发送到实例0xab48380” 为什么会出现这个问题 Class mapItemClass=[MKMapItem cl
MKMapItem
创建多个地点标记,而不使用坐标
我直接在GeocodeAddressString:@“Mumbai”中使用了位置名称,…
但我得到了单个位置的结果
当我通过阵列使用多个位置时,我遇到以下错误:
由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“-[\uu NSArrayI length]:未识别的选择器已发送到实例0xab48380”
为什么会出现这个问题
Class mapItemClass=[MKMapItem class];
if(mapItemClass &&[mapItemClass respondsToSelector:@selector(openMapsWithItems:launchOptions:)])
{
NSArray *addr=[[NSArray alloc ]initWithObjects:@"Banglore",@"Mumbai",@"Delhi", nil];
CLGeocoder *geocoder=[[CLGeocoder alloc]init];
[geocoder geocodeAddressString:addr completionHandler:^(NSArray *placemarks, NSError *error) {
CLPlacemark *geocodedPlacemark=[placemarks objectAtIndex:0];
MKPlacemark *placemark=[[MKPlacemark alloc]initWithCoordinate:geocodedPlacemark.location.coordinate addressDictionary:geocodedPlacemark.addressDictionary];
MKMapItem *mapItem=[[MKMapItem alloc]initWithPlacemark:placemark];
[mapItem setName:geocodedPlacemark.name];
[MKMapItem openMapsWithItems:@[mapItem] launchOptions:nil];
}];
}
错误状态为
-[\uu NSArrayI length]:无法识别的选择器发送到实例0xab48380'
NSArray没有属性长度。因此无法找到长度选择器。所以,请检查您在哪里使用NSArray,并保留断点以查找错误发生的位置。长度是
NSString
和NSData
的方法,但NSArray没有长度,它有count错误状态,即-[\u NSArrayI length]:发送到实例0xab48380'的无法识别的选择器。
NSArray没有属性长度。因此无法找到长度选择器。所以,请检查您在哪里使用NSArray,并保留断点以查找错误发生的位置。长度是
NSString
和NSData
的方法,但是NSArray没有长度,它有计数我已经能够使用此代码复制它
id array = [[NSArray alloc] initWithObjects:@"Hello", @"World", nil];
NSLog(@"%d",[array length]);
输出
-[__NSArrayI length]: unrecognized selector sent to instance 0x96bafe0
注意我是如何使用id
而不是NSArray
来使用id
的,我可以调用length
,这是NSArray
所不允许的,但这在使用id
时会绕过编译器。
因此,找出问题所在的最佳方法是添加一个异常,该异常将捕获所有异常。通过选择项目导航器wind>>中的“异常”选项卡,选择“+”>>“添加异常断点…”“>>,然后选择“完成”。这将在每次应用程序引发异常时设置断点
编辑
由于您添加了代码,我怀疑您正在传递一个NSArray
,其中应该有一个NSString
。你创造
NSArray *addr=[[NSArray alloc ]initWithObjects:@"Banglore",@"Mumbai",@"Delhi", nil];
然后将其传递给geocodeAddressString:addr
[geocoder geocodeAddressString:addr completionHandler:^(NSArray *placemarks, NSError *error) {
仅根据此参数的名称,我怀疑它应该是一个NSString
而不是NSArray
尝试将addr替换为[addr objectAtIndex:0]
这将获得addr数组索引0处的string对象
编辑2
这里是您正在调用的方法,请注意,它只允许为geocodeAddressString传入NSString
- (void)geocodeAddressString:(NSString *)addressString completionHandler:(CLGeocodeCompletionHandler)completionHandler;
我已经能够使用这段代码复制它
id array = [[NSArray alloc] initWithObjects:@"Hello", @"World", nil];
NSLog(@"%d",[array length]);
输出
-[__NSArrayI length]: unrecognized selector sent to instance 0x96bafe0
注意我是如何使用id
而不是NSArray
来使用id
的,我可以调用length
,这是NSArray
所不允许的,但这在使用id
时会绕过编译器。
因此,找出问题所在的最佳方法是添加一个异常,该异常将捕获所有异常。通过选择项目导航器wind>>中的“异常”选项卡,选择“+”>>“添加异常断点…”“>>,然后选择“完成”。这将在每次应用程序引发异常时设置断点
编辑
由于您添加了代码,我怀疑您正在传递一个NSArray
,其中应该有一个NSString
。你创造
NSArray *addr=[[NSArray alloc ]initWithObjects:@"Banglore",@"Mumbai",@"Delhi", nil];
然后将其传递给geocodeAddressString:addr
[geocoder geocodeAddressString:addr completionHandler:^(NSArray *placemarks, NSError *error) {
仅根据此参数的名称,我怀疑它应该是一个NSString
而不是NSArray
尝试将addr替换为[addr objectAtIndex:0]
这将获得addr数组索引0处的string对象
编辑2
这里是您正在调用的方法,请注意,它只允许为geocodeAddressString传入NSString
- (void)geocodeAddressString:(NSString *)addressString completionHandler:(CLGeocodeCompletionHandler)completionHandler;
您在
NSArray
,NSArray
上的调用长度没有计数。请添加一个异常断点,以确定代码中的哪一行最终发出此调用。请发布相关代码。有人能告诉我我犯了什么错误吗..提前谢谢..您在NSArray
上的调用长度,NSArray
没有长度,它们没有计数。添加一个异常断点以确定代码中的哪一行最终发出此调用。请发布相关代码。有人能告诉我我犯了什么错误吗..提前感谢..[geocoder geocodeAddressString:addr completionHandler:^(NSArray*placemarks,NSError*error){
这一行您要传递的是geocodeAddressString一个NSArray
您应该传递一个NSString
可以通过NSString传递2或3个位置吗?我想您会发现您只能传递一个NSString
而不能传递一个NSArray
谢谢大力水手..它工作正常,没有错误..但是在使用索引va时lue of:0..仅显示第一个位置..Banglore..是否有可能通过更改索引值来显示所有3个位置???[geocoder geocodeAddressString:addr completionHandler:^(NSArray*placemarks,NSError*error){
这一行您要传递的是geocodeAddressString一个NSArray
您应该传递一个NSString
可以通过NSString传递2或3个位置吗?我想您会发现您只能传递一个NSString
而不能传递一个NSArray
谢谢大力水手..它工作正常,没有错误..但是在使用索引va时lue of:0..仅显示第一个位置..Banglore..是否有可能通过更改索引值来显示所有3个位置??