我已经查看了stackoverflow中与我的问题密切相关的其他问题,但我的问题有点不同。在这里,代码在iPad上工作正常,但不是我的iPhone。我的iPad将正确加载所有300多个注释,但我的iPhone只会加载其中的80个。我不确定这是否是由于iPhone上的内存量,因为当我在模拟器上测试时它会做同样的事情。您将在下面找到我的示例代码。
@interface MOVmapViewController ()
@end
#define VA_LATITUDE 37.413754;
#define VA_LONGITUDE -79.142246;
//Span
#define THE_SPAN 5.50f;
@implementation MOVmapViewController
@synthesize myMapView;
-(IBAction)findmylocation:(id)sender {
myMapView.showsUserLocation = YES;
myMapView.delegate = MKMapTypeStandard;
[myMapView setUserTrackingMode:MKUserTrackingModeFollow animated:YES];
}
-(IBAction)setmaptype:(id)sender {
switch (((UISegmentedControl *)sender).selectedSegmentIndex) {
case 0:
myMapView.mapType = MKMapTypeStandard;
break;
case 1:
myMapView.mapType = MKMapTypeSatellite;
break;
case 2:
myMapView.mapType = MKMapTypeHybrid;
break;
default:
myMapView.mapType = MKMapTypeStandard;
break;
}
}
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typiclly from a nib.
//Create the region
MKCoordinateRegion myRegion;
//Center
CLLocationCoordinate2D center;
center.latitude = VA_LATITUDE;
center.longitude = VA_LONGITUDE;
//Span
MKCoordinateSpan span;
span.latitudeDelta = THE_SPAN;
span.longitudeDelta = THE_SPAN;
myRegion.center = center;
myRegion.span = span;
//Set our mapView
[myMapView setRegion:myRegion animated:YES];
//Annotations
//Abingdon Lodge No. 48
NSString *abingdon = @"325 W Main Street Abingdon, Virginia 24210";
CLGeocoder *abingdongeo = [[CLGeocoder alloc] init];
[abingdongeo geocodeAddressString:abingdon completionHandler:^(NSArray* placemarks, NSError* error){
if (placemarks && placemarks.count > 0) {CLPlacemark *topResult = [placemarks objectAtIndex:0];
MKPlacemark *placemark = [[MKPlacemark alloc] initWithPlacemark:topResult];
MKPointAnnotation *point = [[MKPointAnnotation alloc] init];
point.coordinate = placemark.coordinate;
point.title = @"Abingdon Lodge No. 48";
point.subtitle = @"Abingdon, VA";
[self.myMapView addAnnotation:point]; }}];
//York Lodge No. 12
NSString *york = @"14411 Black Hollow Road Abingdon, Virginia 24210";
CLGeocoder *yorkgeo = [[CLGeocoder alloc] init];
[yorkgeo geocodeAddressString:york completionHandler:^(NSArray* placemarks, NSError* error){
if (placemarks && placemarks.count > 0) {CLPlacemark *topResult = [placemarks objectAtIndex:0];
MKPlacemark *placemark = [[MKPlacemark alloc] initWithPlacemark:topResult];
MKPointAnnotation *point = [[MKPointAnnotation alloc] init];
point.coordinate = placemark.coordinate;
point.title = @"York Lodge No. 12";
point.subtitle = @"Abingdon, VA";
[self.myMapView addAnnotation:point]; }}];
//Alberene Lodge No. 277
NSString *alberene = @"2722 Plank Road Alberene, Virginia 22959";
CLGeocoder *alberenegeo = [[CLGeocoder alloc] init];
[alberenegeo geocodeAddressString:alberene completionHandler:^(NSArray* placemarks, NSError* error){
if (placemarks && placemarks.count > 0) {CLPlacemark *topResult = [placemarks objectAtIndex:0];
MKPlacemark *placemark = [[MKPlacemark alloc] initWithPlacemark:topResult];
MKPointAnnotation *point = [[MKPointAnnotation alloc] init];
point.coordinate = placemark.coordinate;
point.title = @"Alberene Lodge No. 277";
point.subtitle = @"Alberene, VA";
[self.myMapView addAnnotation:point]; }}];
//A. Douglas Smith, Jr. Lodge of Research No. 1949
NSString *douglas = @"101 Callahan Drive Alexandria, Virginia 22301";
CLGeocoder *douglasgeo = [[CLGeocoder alloc] init];
[douglasgeo geocodeAddressString:douglas completionHandler:^(NSArray* placemarks, NSError* error){
if (placemarks && placemarks.count > 0) {CLPlacemark *topResult = [placemarks objectAtIndex:0];
MKPlacemark *placemark = [[MKPlacemark alloc] initWithPlacemark:topResult];
MKPointAnnotation *point = [[MKPointAnnotation alloc] init];
point.coordinate = placemark.coordinate;
point.title = @"A. Douglas Smith, Jr. Lodge of Research No. 1949";
point.subtitle = @"Alexandria, VA";
[self.myMapView addAnnotation:point]; }}];
//Alexandria-Washington Lodge No. 22 same location as above use lat/long
CLLocationCoordinate2D washington;
washington.latitude = 38.806758;
washington.longitude = -77.065251;
Annotation *alexandriawashingtonlodge = [Annotation alloc];
alexandriawashingtonlodge.coordinate = washington;
alexandriawashingtonlodge.title = @"Alexandria-Washington Lodge No. 22";
alexandriawashingtonlodge.subtitle = @"Alexandria, VA";
[self.myMapView addAnnotation:alexandriawashingtonlodge];
此列表继续共有约310个小屋位置。
答案 0 :(得分:1)
像这样使用,
NSString *abingdon = @"325 W Main Street Abingdon, Virginia 24210";
CLGeocoder *abingdongeo = [[CLGeocoder alloc] init];
[abingdongeo geocodeAddressString:abingdon completionHandler:^(NSArray* placemarks, NSError* error){
if (placemarks && placemarks.count > 0) {
CLPlacemark *topResult = [placemarks objectAtIndex:0];
MKPlacemark *placemark = [[MKPlacemark alloc] initWithPlacemark:topResult];
MKPointAnnotation *point = [[MKPointAnnotation alloc] init];
point.coordinate = placemark.coordinate;
point.title = @"Abingdon Lodge No. 48";
point.subtitle = @"Abingdon, VA";
// Set your region using placemark (not point)
MKCoordinateRegion region = self.mapView.region;
region.center = placemark.region.center;
region.span.longitudeDelta /= 8.0;
region.span.latitudeDelta /= 8.0;
// Add point (not placemark) to the mapView
[self.mapView setRegion:region animated:YES];
[self.mapView addAnnotation:point];
// Select the PointAnnotation programatically
[self.mapView selectAnnotation:point animated:NO]; }}];
答案 1 :(得分:0)
我的一些注释未显示的原因是因为我多次调用CLGeocoder。以下是我解决问题的方法。
//Columbia Lodge No. 285
CLLocationCoordinate2D columbia;
columbia.latitude = 38.895746;
columbia.longitude = -77.106511;
Annotation *columbialodge = [[Annotation alloc] init];
columbialodge.coordinate = columbia;
columbialodge.title = @"Columbia Lodge No. 285";
columbialodge.subtitle = @"Arlington, VA";
[self.myMapView addAnnotation:columbialodge];
我将我的所有地址都转换为Lat long。这也减少了内存使用量。
尽管我喜欢只是放入地址,但看起来CLGeocoder只占用了很多资源。