2012-04-13 54 views
0

我使用一些引脚加载MKMapView,这些引脚根据地址坐标丢弃。一切正常,直到我将mapview打开一段时间(2分钟)。然后它崩溃,没有事件发生。这可能是什么原因。MapVIew中的崩溃

在我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]; 
+3

你可以发布与崩溃相关的任何错误或者可能是一些代码行吗? – simonbs 2012-04-13 04:36:57

+0

发布一些代码和错误屏幕截图会帮助我们来帮助你。 :-) – 2012-04-13 04:41:15

+0

尝试调试你的代码或在这里发布一些代码,这样其他人会看到并给你答案 – 2012-04-13 04:54:12

回答

0

设置的MapView委托为零的dealloc方法解决我的问题。

1

试试这个: - (无效)viewDidLoad中{ [超级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; 

}

+0

如果我们不知道他的实现是什么样的,它究竟如何回答他的问题? – CodaFi 2012-04-13 05:08:52

0

我的iPhone4S和控制台崩溃,显示nan值的区域。在尝试了7种不同的SO解决方案和Apple DTS的各种建议之后,我通过消除regionThatFits调用来解决这个问题。我简单地使用:

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

[_mapView setRegion:adjustedRegion animated:YES]; 

显然有一个regionThatFits方法的问题。