【发布时间】:2011-04-29 20:40:55
【问题描述】:
我对编程还是很陌生,所以我有一个菜鸟问题。当您在我的 appDelegate.m 文件中有一个实例变量时,在我的 CLLocationManager 类型的情况下,我想我可以在 applicationDidFinishLaunching 方法中分配和初始化我的 CLLocationManager 实例变量。然后我可以使用一个按钮以不同的方法启动UpdatingLocation(因为我是从另一个类调用它)。这似乎不起作用,我认为我需要使用与 startUpdatingLocation 相同的方法来分配/初始化。真的吗?我是否需要以相同的方法停止更新位置?我的代码如下:
(locationManager is declared as a property)
- (void)stopUpdating {
[locationManager stopUpdatingLocation];
}
- (double)distanceTraveled {
return distanceTraveled;
}
- (void)applicationDidFinishLaunching:(UIApplication *)application {
// Override point for customization after application launch
[window addSubview:rootController.view];
locationManager = [[CLLocationManager alloc] init];
locationManager.delegate = self;
locationManager.desiredAccuracy = kCLLocationAccuracyBest;
[window makeKeyAndVisible];
}
- (void)startUpdating {
[locationManager startUpdatingLocation];
}
看来我应该这样做更像:
- (void)startUpdating {
locationManager = [[CLLocationManager alloc] init];
locationManager.delegate = self;
locationManager.desiredAccuracy = kCLLocationAccuracyBest;
[locationManager startUpdatingLocation];
}
如果我应该这样做第二种方式,是因为 CLLocationManager 对象的范围仅适用于它所在的方法吗?我认为将它作为实例变量可以在其他方法中使用它,并且我可以为 startUpdatingLocation 和 stopUpdatingLocation 提供单独的方法。谢谢。
【问题讨论】:
-
不要过多地贬低您的问题,但请理解应用程序委托不应用于此类事情。将此添加到最有意义的控制器中(即,取决于您的层次结构,也许将它放在您的根视图控制器中是有意义的)。应用程序委托有一个有限的目的:设置您的应用程序,并仅处理特定事件。你的工作是在其他地方完成其余的工作。
-
好的。我想我认为 appDelegate 的一部分是设置你的应用程序,比如打开 GPS,但我明白你的意思。会改的。
标签: objective-c cllocationmanager