【问题标题】:Get User Location in appDelegate在 appDelegate 中获取用户位置
【发布时间】:2013-07-08 07:32:18
【问题描述】:

这是场景。我有两个 UIViewControllers。可以说,PresentinLondonViewControllerNotPresentinLondonViewController。我想首先加载的视图应该取决于当前用户。假设当且仅当当前用户的位置是伦敦,那么我希望 PresentViewController 显示,否则 NotPresentViewController。

我已经做了很多研究,即使尝试了协议,也找不到任何具体的东西。对我不起作用。

【问题讨论】:

    标签: iphone ios cllocationmanager cllocation appdelegate


    【解决方案1】:

    您可以使用CLLocationManager获取您当前的位置,然后您可以使用reverse geocoding从坐标中获取地址。

    在该地址中,如果准确,您会发现“London”一词符合您的需求。

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 中执行此操作:

    CLLocationManager *manager = [[CLLocationManager alloc] init];
    manager.delegate = self;
    //Here you set the Distance Filter that you need
    manager.distanceFilter = kCLDistanceFilterNone;
    // Here you set the Accuracy 
      manager.desiredAccuracy = kCLLocationAccuracyBestForNavigation;
    [manager startUpdatingLocation];
    

    在委托函数中:

    -(void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
    {
    
    
            CLGeocoder *geocoder = [[CLGeocoder alloc] init];
            [geocoder reverseGeocodeLocation:newLocation completionHandler:^(NSArray *placemarks, NSError *error) {
                //Picked the first placemark
                 CLPlacemark *placemark = placemarks[0];
               //you can play and see how to grab the key name that you want.
                 NSLog(@"Address %@",[NSString stringWithFormat:@"%@ %@",placemark.thoroughfare,addressNumber]);
              //Do your additional setup here
    
            }];
            [geocoder release];
            [location release];
    
    }
    

    如果您想延迟加载以便有时间获取所有信息,那么您可以出示另一个带有splash screenviewcontroller 并在那里/或@987654329 中进行检查@。

    【讨论】:

    • 谢谢@soryngod!!我已经想通了。虽然我之前已经成功地在我的视图控制器中实现了CLLocationManager+CoreLocation。我有些无法在 appDelegate 中这样做。我试图在didFinishLaunchingWithOptions 中设置位置管理器,但它出现在[ locationManager startUpdatingLocation] 被执行并显示根视图控制器之后的代码,而不是传递给-(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations 的控制
    • 问题在于您需要延迟应用程序的加载,以便您可以在后台进行此设置,您可以使用启动屏幕呈现另一个视图控制器,然后当您被要求提供您的位置,如果用户按下取消,那么您将显示 NotPresentInLondon 控制器,否则您检查是否找到伦敦并决定使用哪个视图控制器。
    • 嗯.. 另一个愚蠢的问题。虽然我知道如果我要添加一个额外的启动画面,我会如何管理它。有没有办法让应用委托在设置完成之前不加载根视图控制器??
    • 最好这样做。加载splashviewcontroller,您可以删除rootviewcontroller并出现黑屏,但不要认为这对您有好处。
    • 是的,很高兴我能帮上忙!
    【解决方案2】:

    CLLocationManager 获取当前的 latLong 以供您使用

    - (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations
    {
    //for iOS 6+
    }
    
    - (void)locationManager:(CLLocationManager *)manager
        didUpdateToLocation:(CLLocation *)newLocation
               fromLocation:(CLLocation *)oldLocation 
    {
    //for lower then iOS 6
    }
    

    要从您的经纬度获取地址,请使用此网址

        NSString *urlString = [NSString stringWithFormat:@"http://maps.googleapis.com/maps/api/geocode/json?sensor=true&latlng=%f,%f",YourLatitude,YourLongitude];
    

    【讨论】:

    • 感谢@Nirav。如果问题标题具有误导性,我很抱歉。但我更关心的是根据用户位置设置根视图控制器.. p.s 我知道如何获取当前用户位置
    【解决方案3】:

    你可以使用MKReverseGeocoder获取MKPlacemark,你可以获取CurrentAddress的苹果示例代码

    或者这里是另一个链接

    objective c how to get placemarks of given coordinates

    【讨论】:

    • 感谢@Rajneesh071。如果问题标题具有误导性,我很抱歉。但我更关心的是根据用户位置设置根视图控制器.. p.s 我知道如何获取当前用户位置
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-19
    • 2017-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多