Xcode 4.2映射视图initWithDictionary

时间:2012-01-16 22:54:42

标签: objective-c xcode

我刚刚升级到新的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");
}

1 个答案:

答案 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)。