1

アプリが読み込まれると、Mapview が正常に読み込まれます。

次に、ビューを変更して最初にメイン ビューに戻り、viewDidAppear が初期化された後、Mapview が正常に読み込まれます。

しかし、viewDidAppear の最初のインスタンスの後、mapview マップが読み込まれず、背景が黄色になります。mapview マップが再び表示される前に、アプリを再起動する必要があります。

これは、ビューを変更するときにマップビューを適切に解放していないためですか? ARCを使用しています。

編集(katzenhut):OPはこのコードをコメントに投稿しました:Appdelegate.m

if(self.locationManager==nil){
     _locationManager=[[CLLocationManager alloc] init];
     _locationManager.delegate=self;
     self.locationManager = _locationManager;
 }

Viewcontroller.m

- (void)viewDidAppear:(BOOL)animated{


    [self setValuesFromPreferences];
    appDelegate.refresh = FALSE;
    theMapView.showsUserLocation = YES;
    [theMapView setCenterCoordinate:appDelegate.locationManager.location.coordinate   zoomLevel:zoom animated:YES];
    [super viewDidAppear:animated];
}

- (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation{
    [theMapView setCenterCoordinate: appDelegate.locationManager.location.coordinate zoomLevel:zoom animated: YES];
}

Mapviewcontroller.m

#import "MapViewController.h"


@implementation MapViewController
@synthesize theMapView;

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
    // Custom initialization
    }
    return self;
}

- (void)viewDidLoad
{
    appDelegate = (theAppDelegate *)[UIApplication sharedApplication].delegate;
    [super viewDidLoad];

}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];

}
- (void)viewDidAppear:(BOOL)animated
{
    theMapView.showsUserLocation = YES;
    pendingRegionChange = YES;
    isTracking = YES;
    [theMapView setCenterCoordinate:appDelegate.locationManager.location.coordinate zoomLevel:14 animated:YES];
    [super viewDidAppear:animated];


}

-(void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation
{
    if( isTracking )
    {
        pendingRegionChange = YES;
        [theMapView setCenterCoordinate:appDelegate.locationManager.location.coordinate zoomLevel:14 animated:YES];
    }
}

-(void) mapView:(MKMapView *)mapView regionWillChangeAnimated:(BOOL)animated
{
    if( isTracking && ! pendingRegionChange )
    {
        isTracking = NO;
    }

    pendingRegionChange = NO;
}

@end

viewcontroller.m の次のコードの問題を解決しました。

- (void)viewDidDisappear:(BOOL)animated{
    [timer invalidate];
}
4

0 に答える 0