Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/108.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 处理geocodeAddressString的结果时出现无法识别的选择器错误_Iphone_Ios_Clgeocoder_Mkmapitem - Fatal编程技术网

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个位置??