尝试在我的应用程序中打开苹果地图应用程序时发送到实例的无法识别的选择器

Posted

技术标签:

【中文标题】尝试在我的应用程序中打开苹果地图应用程序时发送到实例的无法识别的选择器【英文标题】:Unrecognized selector sent to instance while trying to open apple maps app in my app 【发布时间】:2016-04-15 21:12:57 【问题描述】:

我正在尝试在我创建的地图中打开苹果地图,在此过程中我收到一条错误消息,提示“无法识别的选择器发送到实例”。我正在使用 arc,所以应该没有内存管理问题。这是我在 viewDidLoad 中编写的代码。我创建了一个按钮并向其添加了一个选择器..

UIButton *appleMapsButton = [[UIButton alloc] init];
appleMapsButton.frame = CGRectMake(100, 100, 200, 200);
appleMapsButton.backgroundColor = [UIColor redColor];
[appleMapsButton addTarget:self action:@selector(appleMapsClicked:) forControlEvents:UIControlEventTouchUpInside];
[mapView addSubview:appleMapsButton];

下面是动作方法:

-(void)appleMapsClicked

CLLocationCoordinate2D endingCoord = CLLocationCoordinate2DMake(lat, lng);
MKPlacemark *endLocation = [[MKPlacemark alloc] initWithCoordinate:endingCoord addressDictionary:nil];
MKMapItem *endingItem = [[MKMapItem alloc] initWithPlacemark:endLocation];

NSMutableDictionary *launchOptions = [[NSMutableDictionary alloc] init];
[launchOptions setObject:MKLaunchOptionsDirectionsModeDriving forKey:MKLaunchOptionsDirectionsModeKey];

[endingItem openInMapsWithLaunchOptions:launchOptions];

这是我在调试器区域遇到的错误:

-[MapViewController appleMapsClicked:]:无法识别的选择器发送到实例 0x176564d0 2016-04-15 16:10:39.394 Restaurant[1081:220822] *** 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“-[MapViewController appleMapsClicked:]:无法识别的选择器发送到实例 0x176564d0”

【问题讨论】:

【参考方案1】:

您正在注册以使用方法appleMapsClicked: 接收消息,但您的方法没有参数。

删除:,或将方法签名更改为-(void)appleMapsClicked:(id)sender 应该可以解决它。

【讨论】:

【参考方案2】:

这种情况大多数时候都发生在我身上。清除这个“一开始就不会发生”的错误的最佳方法是:

1) 删除你的 UIButton 和 IBOutlet 2) 再次创建一个新的 UIButton 并重新连接到 ViewController。

要查明这是否是问题所在,请删除按钮功能内的所有代码并运行。如果你按下按钮仍然出错,那么你只需要创建一个新按钮。

这可能是某些人的解决方案。

【讨论】:

【参考方案3】:

您可能重命名或删除了在 MapViewController 上调用 appleMapsClicked 的按钮。

同样的事情发生在我身上,但我无法以常规方式修复它,(右键单击按钮并从 UI 中删除方法引用)

然后我可以通过使用外部编辑器打开 Main.StoryBoard 来解决问题(右键单击 Main.StoryBoard 并单击“使用外部编辑器打开”)。

它将以 XML 文件的形式打开故事板。在编辑器中,在 MapViewController 节点下搜索“appleMapsClicked”。您可能会发现的第一件事是对不再存在的方法 (appleMapsClicked) 的引用。删除该行并再次运行。

这听起来可能是一个讨厌的解决方案,因为您不应该使用 Xcode 处理自动生成的文件,但这是我唯一的出路。

希望对你有帮助。

【讨论】:

【参考方案4】:

找到解决方案:

当您添加一个方法作为选择器并且该方法没有参数时,不要像这样在方法旁边放置冒号:

(mySelector:)

通过排除冒号,应用程序没有崩溃。

【讨论】:

【参考方案5】:

解决方案:

    将方法-(void)appleMapsClicked改成-(void)appleMapsClicked:(UIButton *)sender

    将选择器@selector(appleMapsClicked:)的名称更改为@selector(appleMapsClicked)

您可以选择这些解决方案中的任何一个

【讨论】:

以上是关于尝试在我的应用程序中打开苹果地图应用程序时发送到实例的无法识别的选择器的主要内容,如果未能解决你的问题,请参考以下文章

如何在我的应用 iOS6 中获取行车路线

如何使用我的 ios 应用程序中的路线打开苹果地图应用程序

带有多个目标的苹果或谷歌地图的 ios 导航

如何在苹果地图中的两个位置之间绘制路线。通过 openURL

iOS 苹果地图在美国以外的可用性

iOS地图样式配置向上滑动?