如何识别无法识别的选择器和无法识别它的对象?

时间:2014-03-16 22:52:05

标签: ios objective-c mkmapview unrecognized-selector

我跟随实施MapKit的斯坦福iOS 7课程的第15章。当在核心数据表视图控制器(教授给控制器的名称)中单击一个单元格时,它应该转到地图视图,其中引脚(即注释)显示照片的位置一张地图。下面的代码来自摄影师组织照片的控制器,并在下面的代码中方法的第一行旁边生成此警告

sending 'nsarray *' to parameter of incompatible type 'id mkannotation '

在XCode中,当我运行它时,它停在下面代码的第一行,并在控制台中留下此错误消息

Photomania[2108:a0b] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSArrayM coordinate]: unrecognized selector sent to instance 0x9d37df0'

所以我理解一条消息(选择器)正被发送到一个不识别该消息的实例,但是我不确定什么是错误的选择器以及哪个对象没有认识到了吗?

#import "PhotosByPhotographerMapViewController.h"
#import <MapKit/MapKit.h>
#import "Photo.h"

@interface PhotosByPhotographerMapViewController () <MKMapViewDelegate>
@property (weak, nonatomic) IBOutlet MKMapView *mapView;
@property (nonatomic, strong) NSArray *photosByPhotographer;

@end

@implementation PhotosByPhotographerMapViewController

-(void)updateMapViewAnnotations
{

    [self.mapView removeAnnotation: self.mapView.annotations];
    [self.mapView addAnnotations: self.photosByPhotographer];
    [self.mapView showAnnotations: self.photosByPhotographer animated:YES];

}

1 个答案:

答案 0 :(得分:1)

这一行:

[self.mapView removeAnnotation: self.mapView.annotations];

应该是:

[self.mapView removeAnnotations: self.mapView.annotations];

removeAnnotation:需要一个注释。 removeAnnotations:需要一组注释。

这将解决您的两个问题。

仅供参考 - 永远不要忽略编译器警告。如果您的代码没有编译清理,它可能会崩溃。