2012-02-13 8 views
3

したがって、NSUserDefaultのボタンプッシュでユーザーの場所を保存しています。しかし、私がそれを呼び出すと、私はnullになります。NSUserDefaultsでユーザーコードを保存して呼び出す

目的はユーザーの場所を取得(完了)してから保存することです。その結果、マップが再読み込みされると、ユーザーがいた場所にピンが表示されます。今すぐマップをクリアしてリセットします。ボタンプッシュで

省:

MKCoordinateRegion location1; 
location1.center.latitude =locationManager.location.coordinate.latitude; 
location1.center.longitude= locationManager.location.coordinate.longitude; 
location1.span.longitudeDelta=0.1; 
location1.span.latitudeDelta =0.1; 

MapAnnotation *ann1 =[[MapAnnotation alloc] init]; 
[email protected]"You Parked Here"; 
[email protected]""; 
ann1.coordinate= location1.center; 
[mapView addAnnotation:ann1]; 

NSUserDefaults *ud = [NSUserDefaults standardUserDefaults]; 
[ud setDouble:location1.center.latitude forKey:@"savedCoordinate-latitude"]; 
[ud setDouble:location1.center.longitude forKey:@"savedCoordinate-longitude"]; 
[ud setBool:YES forKey:@"savedCoordinate-exists"]; 
[ud synchronize]; 

viewWillAppearに想起:

-(void)viewWillAppear:(BOOL)animated{ 

NSUserDefaults *ud = [NSUserDefaults standardUserDefaults]; 
if ([ud boolForKey:@"savedCoordinate-exists"]) 
{ 
    CLLocationCoordinate2D savedCoordinate; 
    savedCoordinate.latitude = [ud doubleForKey:@"savedCoordinate-latitude"]; 
    savedCoordinate.longitude = [ud doubleForKey:@"savedCoordinate-longitude"]; 
    //create annotation object using savedCoordinate and add to map view... 
    NSLog(@"%@",savedCoordinate.latitude); 

    MKCoordinateRegion location1; 
    //location1.center.latitude =savedCoordinate.latitude; 
    //location1.center.longitude= savedCoordinate.longitude; 
    location1.span.longitudeDelta=0.1; 
    location1.span.latitudeDelta =0.1; 

    MapAnnotation *ann1 =[[MapAnnotation alloc] init]; 
    [email protected]"You Parked Here"; 
    [email protected]""; 
    ann1.coordinate= savedCoordinate; 
    [mapView addAnnotation:ann1]; 
} 

} 

全.Mページ:

#import "LocationTestViewController.h" 
#import "CoreLocation/CoreLocation.h" 
#import "MapAnnotation.h" 

@implementation LocationTestViewController 
@synthesize locationManager; 
@synthesize mapView; 
@synthesize labelText; 

- (void)dealloc 
{ 
    [mapView release]; 
    [locationManager release]; 
    [super dealloc]; 
} 

- (void)didReceiveMemoryWarning 
{ 
    // Releases the view if it doesn't have a superview. 
    [super didReceiveMemoryWarning]; 

    // Release any cached data, images, etc that aren't in use. 
} 

#pragma mark - View lifecycle 

/* 
// Implement viewDidLoad to do additional setup after loading the view, typically from a nib. 
- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

}*/ 
-(void)viewWillAppear:(BOOL)animated{ 

    NSUserDefaults *ud = [NSUserDefaults standardUserDefaults]; 
    if ([ud boolForKey:@"savedCoordinate-exists"]) 
    { 
     CLLocationCoordinate2D savedCoordinate; 
     savedCoordinate.latitude = [ud doubleForKey:@"savedCoordinate-latitude"]; 
     savedCoordinate.longitude = [ud doubleForKey:@"savedCoordinate-longitude"]; 
     //create annotation object using savedCoordinate and add to map view... 
     NSLog(@"%f",savedCoordinate.latitude); 

     MKCoordinateRegion location1; 
     //location1.center.latitude =savedCoordinate.latitude; 
     //location1.center.longitude= savedCoordinate.longitude; 
     location1.span.longitudeDelta=0.1; 
     location1.span.latitudeDelta =0.1; 

     MapAnnotation *ann1 =[[MapAnnotation alloc] init]; 
     [email protected]"You Parked Here"; 
     [email protected]""; 
     ann1.coordinate= savedCoordinate; 
     [mapView addAnnotation:ann1]; 
    } 

} 

- (void)viewDidUnload 
{ 
    [self setMapView:nil]; 
    [self setLocationManager:nil]; 
    [super viewDidUnload]; 
    // Release any retained subviews of the main view. 
    // e.g. self.myOutlet = nil; 
} 

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
{ 
    // Return YES for supported orientations 
    return (interfaceOrientation == UIInterfaceOrientationPortrait); 
    } 

- (IBAction)getLocation:(id)sender { 

    locationManager = [[CLLocationManager alloc] init]; 
    locationManager.distanceFilter=kCLDistanceFilterNone; 
    locationManager.desiredAccuracy = kCLLocationAccuracyHundredMeters; 
    [locationManager startUpdatingLocation]; 

    [mapView setMapType:MKMapTypeStandard]; 
    [mapView setZoomEnabled:YES]; 
    [mapView setScrollEnabled:YES]; 
    MKCoordinateRegion region = {{0.0,0.0},{0.0,0.0}}; 
    region.center.latitude = locationManager.location.coordinate.latitude; 
    region.center.longitude = locationManager.location.coordinate.longitude; 
    region.span.longitudeDelta = 0.005f; 
    region.span.latitudeDelta = 0.005f; 
    [mapView setRegion:region animated:YES]; 
    [mapView setDelegate:sender]; 



    MKCoordinateRegion location1; 
    location1.center.latitude =locationManager.location.coordinate.latitude; 
    location1.center.longitude= locationManager.location.coordinate.longitude; 
    location1.span.longitudeDelta=0.1; 
    location1.span.latitudeDelta =0.1; 

    labelText.text = [NSString stringWithFormat:@"LATITUDE: %f", location1.center.latitude]; 

    NSLog(@"button b4 save: %@", [NSString stringWithFormat:@"LATITUDE: %f", locationManager.location.coordinate.latitude]); 

    MapAnnotation *ann1 =[[MapAnnotation alloc] init]; 
    [email protected]"You Parked Here"; 
    [email protected]""; 
    ann1.coordinate= location1.center; 
    [mapView addAnnotation:ann1]; 

    NSUserDefaults *ud = [NSUserDefaults standardUserDefaults]; 
    [ud setDouble:location1.center.latitude forKey:@"savedCoordinate-latitude"]; 
    [ud setDouble:location1.center.longitude forKey:@"savedCoordinate-longitude"]; 
    [ud setBool:YES forKey:@"savedCoordinate-exists"]; 
    [ud synchronize]; 

    CLLocationCoordinate2D savedCoordinate; 
    savedCoordinate.latitude = [ud doubleForKey:@"savedCoordinate-latitude"]; 
    savedCoordinate.longitude = [ud doubleForKey:@"savedCoordinate-longitude"]; 
    //create annotation object using savedCoordinate and add to map view... 
    NSLog(@"button push, %f",savedCoordinate.latitude); 
} 

- (IBAction)clearPins:(id)sender{ 
    NSArray *annotations = [mapView annotations]; 
    for (id annotation in annotations) 
{ 
     if ([annotation isKindOfClass:[MKUserLocation class]]) 
     { 
      continue; 
     } 
     [mapView removeAnnotation:annotation]; 
    } 

} 

-(IBAction)goMainMenu{ 
    [self.parentViewController dismissModalViewControllerAnimated:YES]; 
} 
@end 

EDITソリューション:

を、私はこれを追加私のボタンメトーd:

CLLocation *userLoc = mapView.userLocation.location; 
CLLocationCoordinate2D userCoordinate = userLoc.coordinate; 

NSLog(@"user latitude = %f",userCoordinate.latitude); 
NSLog(@"user longitude = %f",userCoordinate.longitude); 

NSUserDefaults *gLat = [NSUserDefaults standardUserDefaults]; 
[gLat setFloat:userCoordinate.latitude forKey:@"latNumber"]; 

NSUserDefaults *gLong = [NSUserDefaults standardUserDefaults]; 
[gLong setFloat:userCoordinate.longitude forKey:@"longNumber"]; 


float myLat=[gLat floatForKey:@"latNumber"]; 
NSLog(@"Button Push: lat : %f",myLat); 

float myLong=[gLong floatForKey:@"longNumber"]; 
NSLog(@"Button Push: long : %f",myLong); 

これは、最もクリーンなことではないかもしれませんが、それは完了です。

+0

NSLog(@ "%@"、savedCoordinate.latitude); nslogが正しく動作しないようです – NeverBe

+0

保存している値をログに記録しましたか?彼らは正しいのですか? userDefaultsから戻ってくるのは正しいのですか? MapAnnotationとは何ですか? – Rayfleck

+0

hmmm nullまたは0になっているようです。どうすれば私のコイードを引き出すことができますか?もっとコードを投稿します。 – Rick

答えて

2

%@文字列形式指定子はObjective-Cオブジェクト用であり、floatでは使用できません。

NSLog(@"latitude is %f", savedCoordinate.latitude); 

ここString Format Specifiers上のAppleのドキュメントがあります:このような%f演算子を使用してみてください。

+0

座標で 'float'を使うと、最後の数桁が切り捨てられます(または丸められます)...座標の値をさらに格納するために使用できる他の数値変数はありますか? –

+0

私は詳細を知らないので、私は[この回答](http://stackoverflow.com/a/1074537/255489)にあなたを参照します。 –

関連する問題