gpt4 book ai didi

iphone - 使用 NSUserDefaults 存储和调用用户坐标

转载 作者:行者123 更新时间:2023-12-03 19:57:00 25 4
gpt4 key购买 nike

所以我在 NSUserDefault 中按下按钮时保存用户位置。但是当我调用它时,我得到了 null。

目标是获取用户位置(完成),然后保存它,以便重新加载 map 时,图钉会显示用户曾经所在的位置。现在它会清除并重置 map 。

节省按钮按下时间:

 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];
ann1.title=@"You Parked Here";
ann1.subtitle=@"";
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];
ann1.title=@"You Parked Here";
ann1.subtitle=@"";
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];
ann1.title=@"You Parked Here";
ann1.subtitle=@"";
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];
ann1.title=@"You Parked Here";
ann1.subtitle=@"";
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

编辑解决方案:

我将其添加到我的按钮方法中:

 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);

可能不是最干净的东西,但它可以完成工作。

最佳答案

%@ 字符串格式说明符适用于 Objective-C 对象,不能与 float 一起使用。尝试使用 %f 运算符,如下所示:

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

这是 Apple 关于 String Format Specifiers 的文档.

关于iphone - 使用 NSUserDefaults 存储和调用用户坐标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9268816/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com