2

我想接收位置更新。我在标题中添加了一个位置委托:

@interface AppDelegate : UIResponder <UIApplicationDelegate, CLLocationManagerDelegate>

以及以下功能:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    //initialize location manager
    CLLocationManager* locationManager = [[CLLocationManager alloc] init];
    locationManager.delegate = self;
    // [locationManager startMonitoringSignificantLocationChanges];
    [locationManager startUpdatingLocation];

    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    self.viewController = [[ViewController alloc] initWithNibName:@"SomeViewController"     bundle:nil];
    self.window.rootViewController = self.viewController;
    [self.window makeKeyAndVisible];
    return YES;
}
- (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error{
    //Some problem
}
- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation     *)newLocation fromLocation:(CLLocation *)oldLocation{
    //Some action
}

但是既没有didUpdateToLocation也没有didFailWithError被调用(模拟器和设备上的问题相同)。我错过了什么?

提前致谢,

旅大

4

2 回答 2

4

您的应用程序的位置服务是否已启用?

PS:这将有助于使您的位置管理器成为实例变量,以便在方法- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions完成后由 ARC 保留它。

于 2012-06-05T08:23:03.923 回答
0

我意识到这是一个死灵,但我在高处和低处寻找答案,但找不到类似情况的解决方案,这似乎是最好的地方。

我使用自定义初始化程序创建了一个委托对象,该初始化程序设置了一些标志,然后运行 ​​[self->locationManager startUpdatingLocation],并在 viewDidLoad 中调用它:

myLocationGetter* __unused getter = [[myLocationGetter alloc]initAndUpdateOnce;

didUpdateToLocation 和 didFailWithError 都没有被调用。似乎 ARC 在回调通过之前忘记了我的 getter 对象。通过在视图控制器中将 getter 声明为实例 var 并在 viewDidLoad 中对其进行初始化来解决问题。

于 2014-01-14T16:52:17.010 回答