0

我正在加载MKMapView一些引脚,这些引脚会根据地址坐标下降。一切正常,直到我保持地图视图打开一段时间(2 分钟)。然后它崩溃了,没有实际发生的事件。这可能是什么原因。

在我的 viewDidLoad 中,我编写了以下代码

 mapView = [[MKMapView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)];
    mapView.delegate=self; 

    [self.view addSubview:mapView]; 

    addressbook = ABAddressBookCreate();
    for (i = 0; i<[groupContentArray count]; i++) {
         NSLog(@"group content array %@", groupContentArray);
        person = ABAddressBookGetPersonWithRecordID(addressbook,[[groupContentArray objectAtIndex:i] intValue]);
        NSLog(@"Person %@", person);
        ABMultiValueRef addressProperty = ABRecordCopyValue(person, kABPersonAddressProperty);
        NSArray *address = (NSArray *)ABMultiValueCopyArrayOfAllValues(addressProperty);
        NSLog(@"Address %@", address);
        for (NSDictionary *addressDict in address) 
        {
            addAnnotation = nil;
            firstName = (NSString *)ABRecordCopyValue(person, kABPersonFirstNameProperty); 
            lastName = (NSString *)ABRecordCopyValue(person, kABPersonLastNameProperty); 

            NSString *country = [addressDict objectForKey:@"Country"];
            NSString *streetName = [addressDict objectForKey:@"Street"];
            NSString *cityName = [addressDict objectForKey:@"City"];
            NSString *stateName = [addressDict objectForKey:@"State"];

            if (streetName == (id)[NSNull null] || streetName.length == 0 ) streetName = @"";
            if (stateName == (id)[NSNull null] || stateName.length == 0 ) stateName = @"";
            if (cityName == (id)[NSNull null] || cityName.length == 0 ) cityName = @"";
            if (country == (id)[NSNull null] || country.length == 0 ) country = @"";


            NSString *fullAddress = [streetName stringByAppendingFormat:@"/%@/%@/%@", cityName, stateName, country];
            mapCenter = [self getLocationFromAddressString:fullAddress];
            if(stateName != NULL || country != NULL || streetName != NULL || cityName != NULL){

                if ((mapCenter.latitude == 0) && (mapCenter.longitude == 0))
                {
                    //Alert View                    
                }
                else{

                if(addAnnotation == nil){
                    addAnnotation = [[[MyAddressAnnotation alloc] initWithCoordinate:mapCenter title:firstName SubTitle:lastName Recordid:[groupContentArray objectAtIndex:i] ]autorelease];

                    [mapView addAnnotation:addAnnotation];}
                else{
                    //     ALert View                 

                }
                }
            }
        }
        CFRelease(addressProperty);

    }
    [self zoomToFitMapAnnotations:mapView];


    [self.navigationItem setHidesBackButton:YES animated:YES];
    NSString *mapTitle = localizedString(@"MAP_TITLE");
    [self setTitle:mapTitle];
    [segmentedControl addTarget:self action:@selector(segmentAction:) forControlEvents:UIControlEventValueChanged];
4

3 回答 3

1

试试这个: - (void)viewDidLoad { [super viewDidLoad];

UIImageView *topBar = [[UIImageView alloc] initWithImage:[UIImage    imageNamed:@"header1.png"]];
topBar.frame = CGRectMake(0, 0, 320, 44);
[self.navigationController.navigationBar insertSubview:topBar atIndex:0];
[topBar release];

self.navigationController.navigationBarHidden=YES;

[mapView setMapType:MKMapTypeStandard];
[mapView setZoomEnabled:YES];
[mapView setScrollEnabled:YES];
[mapView setShowsUserLocation:YES];
MKCoordinateRegion region = { {0.0, 0.0 }, { 0.0, 0.0 } }; 
region.center.latitude = [strLat doubleValue];
region.center.longitude = [strLong doubleValue];
region.span.longitudeDelta = 0.01f;
region.span.latitudeDelta = 0.01f;
[mapView setRegion:region animated:YES]; 

[mapView setDelegate:self];

mapAnonotationView *ann = [[mapAnonotationView alloc] init]; 
ann.title = name;
ann.subtitle = Address; 
ann.coordinate = region.center; 
[mapView addAnnotation:ann];
[ann release];
ann = nil;  

}

于 2012-04-13T05:03:37.670 回答
0

在 dealloc 方法中将 mapview 委托设置为 nil 解决了我的问题。

于 2012-04-14T07:44:04.203 回答
0

我的 iPhone4S 崩溃了,控制台显示了区域的 nan 值。在尝试了来自 SO 的大约 7 种不同的解决方案以及来自 Apple DTS 的各种建议后,我通过消除 regionThatFits 调用来解决它。我只是使用:

CLLocationDistance visibleDistance = 100000; // 100 kilometers
MKCoordinateRegion adjustedRegion = MKCoordinateRegionMakeWithDistance(zoomLocation, visibleDistance, visibleDistance);

[_mapView setRegion:adjustedRegion animated:YES];

显然,该 regionThatFits 方法存在问题。

于 2012-12-12T03:53:09.097 回答