尝试获取包含我所有位置,标题和副标题的NSSDictionary并通过它们进行枚举并将它们添加到我的mapView中。第一部分似乎很好;我阅读了Plist并可以访问各个部分。我遇到的问题是通过枚举。
要求标题的NSLog正确地将该属性报告给控制台。
最后,我看到没有针脚。另外,在NSLog调用之后:
NSLog(@"My %i annotations are: %@", self.mapView.annotations.count, self.mapView.annotations);
我得到回应:
"My 1 annotations are: (
"<MKPointAnnotation: 0xd0151f0>" )
一个注释似乎只是一个内存位置。 嗟。
我确信我做的事情既简单又错误,但我会感激任何帮助。我一整天都在寻找,看到一些似乎是答案的东西,但没有任何东西可以帮助我在这个特殊的结构。
提前谢谢你。
以下代码在主viewController中触发,第一个看到的方法是在ViewDidLoad的末尾调用。
-(void) loadUpLocations{
NSPropertyListFormat format;
NSString *errorDesc=nil;
//make path to plist in bundle
NSString *plistPath = [[NSBundle mainBundle] pathForResource:@"locations2" ofType:@"plist"];
//fill data object with contents of file
NSData *myData = [[NSData alloc] initWithContentsOfFile:plistPath];
myLocations=[NSPropertyListSerialization propertyListFromData:myData
mutabilityOption:NSPropertyListMutableContainersAndLeaves
format:&format
errorDescription:&errorDesc];
if (!myLocations) {
NSLog(@"Error reading Plist: %@ format: %@", errorDesc,format);
}
myAnnotation=[[MKPointAnnotation alloc]init];
for (NSString *loc in myLocations) {
NSDictionary *value =[myLocations objectForKey:loc];
//NSLog(@"Loc is equal to: %@",loc);
//loop through and make annotations
myAnnotation.coordinate = CLLocationCoordinate2DMake(
[[value objectForKey:@"latitude"] doubleValue],
[[value objectForKey:@"longitude"] doubleValue]);
myAnnotation.title = [value objectForKey:@"title"];
myAnnotation.subtitle = [value objectForKey:@"subtitle"];
NSLog(@"%@",myAnnotation.title);
[self.mapView addAnnotation:myAnnotation];
}
NSLog(@"My %i annotations are: %@", self.mapView.annotations.count, self.mapView.annotations);
}
- (IBAction)zoomToLocation:(id)sender {
//set center for zoom
MKCoordinateRegion region;
region.center=CLLocationCoordinate2DMake(33.75070416856952, -84.37034368515015);;
//set level of zoom
MKCoordinateSpan span;
span.latitudeDelta=.03;
span.longitudeDelta=.03;
region.span=span;
[mapView setRegion:region animated:YES];
}
// This gets called every time an annotation is in the map view
- (MKAnnotationView *)mapView:mapView viewForAnnotation:annotation{
NSLog(@"in annotationsView");
MKPinAnnotationView *myPins=[[MKPinAnnotationView alloc]
initWithAnnotation:annotation
reuseIdentifier:@"myPins"];
myPins.animatesDrop=YES;
return myPins;
}
答案 0 :(得分:2)
这一行:
myAnnotation=[[MKPointAnnotation alloc]init];
当前位于创建注释的for
循环之外,因此只有一个对象被实例化,并且您不断修改该实例。
将该行移动到for
循环内部(例如,在设置坐标的行上方)。
另外,如果您不使用ARC,请在[myAnnotation release];
行之后添加addAnnotation
。