我刚刚升级到新的Xcode 4.2,并且从我的plist加载地图注释时出现问题。我需要让URL上的plist定期更新。
我对旧版Xcode没有任何问题,但现在出现了ARC错误和
实例消息的接收器类型“MapAnnotations”未声明带有选择器“initWithDictionary”的方法。
非常感谢任何帮助。先感谢您。
MapAnnotations.m代码
-(id)initWithDictionary:(NSDictionary *)dict {
self = [super init];
if (self!=nil) {
coordinate.latitude = [[dict objectForKey:@"latitude"] doubleValue];
coordinate.longitude = [[dict objectForKey:@"longitude"] doubleValue];
self.title = [dict objectForKey:@"name"];
self.subtitle = [dict objectForKey:@"subtitle"];
self.pin = [dict objectForKey:@"pin"];
}
return self;
}
Mapview.M中的部分
NSString *plistPath = [[NSBundle mainBundle] pathForResource:@"Locations" ofType:@"plist"];
NSArray *array = [[NSArray alloc] initWithContentsOfURL:[NSURL URLWithString:@"http://www.MyPlist.plist"]];
if (array) {
NSDictionary* myDict = [NSMutableDictionary dictionaryWithCapacity:[array count]];
for (NSDictionary* dict in array) {
MapAnnotations* annotation = [[MapAnnotations alloc]iniWithDictionary:dict];
[mapview addAnnotation:annotation];
}
NSLog(@"The count: %i", [myDict count]);
}
else {
NSLog(@"Plist does not exist");
}
答案 0 :(得分:2)
此错误:
实例消息的接收器类型“MapAnnotations”未声明带有选择器'initWithDictionary'的方法
表示尚未在initWithDictionary
中声明MapAnnotations.h
方法。在较旧的Xcode中,我认为这只会导致警告。
在MapAnnotations.h
中,声明方法:
@interface MapAnnotations : NSObject<MKAnnotation>
//any ivars, properties, and other method declarations here
-(id)initWithDictionary:(NSDictionary *)dict; // <-- add this
@end
顺便说一句,我认为这一行只是你问题中的一个错字:
MapAnnotations* annotation = [[MapAnnotations alloc]iniWithDictionary:dict];
应该说initWithDictionary
(不是iniWithDictionary
)。