我跟随实施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];
}
答案 0 :(得分:1)
这一行:
[self.mapView removeAnnotation: self.mapView.annotations];
应该是:
[self.mapView removeAnnotations: self.mapView.annotations];
removeAnnotation:
需要一个注释。 removeAnnotations:
需要一组注释。
这将解决您的两个问题。
仅供参考 - 永远不要忽略编译器警告。如果您的代码没有编译清理,它可能会崩溃。