我正在尝试使用MKMapItem
创建多个地标而不使用坐标。
我在geocodeAdressString:@"Mumbai"...
中直接使用了位置名称,但我得到了单个位置的结果。
虽然我通过数组使用多个位置,但我收到此错误:
由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:' - [__ 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];
}];
}
答案 0 :(得分:3)
-[__NSArrayI length]: unrecognized selector sent to instance 0xab48380'
的错误状态
NSArray没有属性长度。所以它无法找到长度的选择器。因此,请检查您使用NSArray的位置并保留断点以查找错误发生的位置。长度是NSString
和NSData
的方法,但NSArray没有长度,它有计数
答案 1 :(得分:2)
我已经能够使用此代码复制此内容
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
,但是当使用NSArray
时,这会绕过编译器。
因此,找出出错的最佳方法是添加一个可以捕获所有异常的异常。通过选择项目导航器wind>>中的例外选项卡来完成此操作。选择'+'>> '添加异常断点...'>>然后选择完成。这将在每次应用程序抛出异常时设置断点。
编辑
感谢您添加的代码,我怀疑您传递的NSString
应该是 NSArray *addr=[[NSArray alloc ]initWithObjects:@"Banglore",@"Mumbai",@"Delhi", nil];
。你创建
geocodeAddressString:addr
然后将其传递给 [geocoder geocodeAddressString:addr completionHandler:^(NSArray *placemarks, NSError *error) {
NSString
只是从这个参数的名称我怀疑它应该是NSArray
而不是[addr objectAtIndex:0]
尝试将addr替换为NSString
这将获得addr的索引0处的字符串对象阵列。
编辑2
以下是您正在调用的方法,它只允许为{geocodeAddressString传入 - (void)geocodeAddressString:(NSString *)addressString completionHandler:(CLGeocodeCompletionHandler)completionHandler;
。
{{1}}