gpt4 book ai didi

iphone - 将坐标从 appDelegate 中的 locationManager 传递到 viewController

转载 作者:可可西里 更新时间:2023-11-01 04:36:01 25 4
gpt4 key购买 nike

我试图在 viewController 出现时获取用户的坐标。我需要几个 viewController 中的位置,所以我将 locationManager 放在 appDelegate 中。我的问题是,在第一个 viewDidAppear 上,尚未找到坐标。我应该如何改变这个?谢谢大家!!!

我的 AppDelegate 有这个:

- (NSString *)getUserCoordinates
{
NSString *userCoordinates = [NSString stringWithFormat:@"latitude: %f longitude: %f",
locationManager.location.coordinate.latitude, locationManager.location.coordinate.longitude];
locationManager = [[CLLocationManager alloc] init];
locationManager.distanceFilter = kCLDistanceFilterNone; // whenever we move
locationManager.desiredAccuracy = kCLLocationAccuracyHundredMeters; // 100 m
[locationManager startUpdatingLocation];
return userCoordinates;
}

我的 viewController 以此获取坐标:

- (void)viewDidAppear 
{
NSString *userCoordinates =[(PDCAppDelegate *)[UIApplication sharedApplication].delegate
getUserCoordinates];
}

最佳答案

我最近在 AppDelegate 中实现了同样的功能,即位置管理器,以便我的 ViewController 都可以访问位置数据。

不要忘记实现 CoreLocation 委托(delegate)方法,尤其是 didUpdateLocations 以获得新的位置数据。我会把它放在 AppDelegate 类中。

由于您有一种关系,其中一个对象 (AppDelegate) 需要通知许多 viewControllers 关于位置更新,我建议使用 NSNotification。

在你的 AppDelegate 中,你会写...

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// set up location manager
self.locationManager = [[CLLocationManager alloc] init];
[self.locationManager setDelegate:self];
[self.locationManager setDesiredAccuracy:kCLLocationAccuracyBest];
[self.locationManager startUpdatingLocation];
return YES;
}

- (void)locationManager:(CLLocationManager *)manager
didUpdateLocations:(NSArray *)locations {
CLLocation * newLocation = [locations lastObject];
// post notification that a new location has been found
[[NSNotificationCenter defaultCenter] postNotificationName:@"newLocationNotif"
object:self
userInfo:[NSDictionary dictionaryWithObject:newLocation
forKey:@"newLocationResult"]];
}

并且在您的 ViewController 中,您不会使用 viewDidAppear 方法。相反,你会这样做......

- (void)viewDidLoad
{
[super viewDidLoad];
// subscribe to location updates
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(updatedLocation:)
name:@"newLocationNotif"
object:nil];
}

你会有一个类似这样的 updatedLocation 方法

-(void) updatedLocation:(NSNotification*)notif {
CLLocation* userLocation = (CLLocation*)[[notif userInfo] valueForKey:@"newLocationResult"];
}

您可以让其他 viewController 也通过将它们添加为观察者来订阅通知更新。

关于iphone - 将坐标从 appDelegate 中的 locationManager 传递到 viewController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14179651/

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