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

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 に答える
0

dealloc メソッドで mapview デリゲートを nil に設定すると、問題が解決しました。

于 2012-04-14T07:44:04.203 に答える