0

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

我的应用程序的内容会根据用户的位置而变化。我希望在"ThisApp" would like to use your current location加载任何内容之前出现对话,以避免必须重新加载内容。

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

我实现这个的方法是让我的应用程序首先转到我的 LocationViewController,它只包含默认代码,没有任何更改,并且在情节提要中它只有一个带有 Default.png 的图像视图。然后我从该位置开始控制器(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. 如果这是获得我想要的东西的合理方式,有没有比 locationManager 更好的地方可以放置 performSegueWithIdentifier?放置它似乎是一个不好的地方(并且不确定它是否会在应用程序中进一步引起问题?),但是将它移动到 LocationViewController 或 didFinishLaunchingWithOptions: 会阻止它工作。

任何为我指明正确方向的帮助将不胜感激。谢谢 :)

4

1 回答 1

0

这似乎是一种相当老套的方法,但可能会奏效。对于这种特定方法,我唯一推荐的就是在找到所需内容后locationManager 停止[locationManager stopUpdatingLocation]更新位置( )。否则,sree charan如前所述,您将收到一堆调用locationManager:didUpdateToLocation:fromLocation:,然后生成大量调用performSegueWithIdentifier:sender:.

顺便说一句,我认为我可能宁愿在 LocationViewController 中而不是在应用程序委托中进行位置更新,但它可能更多地与样式有关,而不是与实质有关。

于 2012-04-30T18:31:43.353 回答