如何在主视图控制器加载之前加载位置?

时间:2012-04-30 16:05:22

标签: iphone objective-c ios

我只想说我仍然是一个Objective-C / iOS菜鸟,我没有那么长时间学习它,所以请原谅我的无知:)

我的应用内容会根据用户的位置而变化。我希望在加载任何内容之前显示"ThisApp" would like to use your current location对话框,以避免内容不得不重新加载。

我注意到某些应用似乎仍然在启动图片页面(显示Default.png的页面)上显示该位置弹出窗口。我做了很多谷歌搜索,但找不到任何东西(可能是因为我不知道正确的术语)。

我实现这个的方法是让我的应用程序首先进入我的LocationViewController,这只包含默认代码,没有更改,并且在故事板中它只有一个带有Default.png的图像视图。然后我有一个segue从位置控制器(LocationViewControllerSegue)到主视图控制器。

我的AppDelegate.h看起来像这样:

#import <UIKit/UIKit.h>
#import <CoreLocation/CoreLocation.h>

@interface AppDelegate : UIResponder <UIApplicationDelegate, CLLocationManagerDelegate>  {
    CLLocationManager *locationManager;
}
@property (strong, nonatomic) UIWindow *window;
@end

我的AppDelegate.m:

#import "AppDelegate.h"

@implementation AppDelegate

@synthesize window = _window;

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    if (locationManager == nil)
        locationManager = [[CLLocationManager alloc] init];
    locationManager.delegate = self;
    locationManager.desiredAccuracy = kCLLocationAccuracyKilometer;
    locationManager.distanceFilter = 16000;

    [locationManager startUpdatingLocation];
    return YES;
}

- (void)locationManager:(CLLocationManager *)manager
    didUpdateToLocation:(CLLocation *)newLocation
           fromLocation:(CLLocation *)oldLocation {
    [self.window.rootViewController performSegueWithIdentifier:@"LocationViewControllerSegue" sender:self.window.rootViewController];
}

... snip a bunch of default generated code ...

@end
  1. 有没有比我的幻觉位置视图控制器方法更好的方法呢?

  2. 如果这是一种合理的方式来获得我想要的东西,那么在某个地方我可以放置performSegueWithIdentifier而不是在locationManager中吗?它似乎是一个糟糕的地方(并不确定它是否会在应用程序中引起问题?),但将其移动到LocationViewController或didFinishLaunchingWithOptions:停止它工作。

  3. 任何帮助我指向正确方向的人都将不胜感激。谢谢:))

1 个答案:

答案 0 :(得分:0)

这看起来像一个相当hacky的方法,但可能有用。对于这种特定方法,我唯一建议的是让locationManager 停止 在找到所需内容后更新位置({{ 1}})。否则,正如[locationManager stopUpdatingLocation]所述,您会收到大量来自sree charan的电话,这些电话会产生大量locationManager:didUpdateToLocation:fromLocation:的来电。

顺便说一下,我想我可能宁愿在你的LocationViewController而不是app委托中进行这个位置更新,但它可能更多地与样式而不是实质相关。