Objective c 对象的范围、目标c、CLLocationManager
我还是一个编程新手,所以我有一个问题。当您在appDelegate.m文件中有一个实例变量(在我的示例中是CLLocationManager类型)时,我认为可以在ApplicationIDFinishLaunching方法中分配和初始化我的CLLocationManager实例变量。然后我可以使用一个按钮以不同的方法启动DatingLocation(因为我是从另一个类调用它)。这似乎不起作用,我想我需要使用与startUpdatingLocation相同的方法alloc/init。这是真的吗?我需要用同样的方法停止更新位置吗?我的代码如下:Objective c 对象的范围、目标c、CLLocationManager,objective-c,cllocationmanager,Objective C,Cllocationmanager,我还是一个编程新手,所以我有一个问题。当您在appDelegate.m文件中有一个实例变量(在我的示例中是CLLocationManager类型)时,我认为可以在ApplicationIDFinishLaunching方法中分配和初始化我的CLLocationManager实例变量。然后我可以使用一个按钮以不同的方法启动DatingLocation(因为我是从另一个类调用它)。这似乎不起作用,我想我需要使用与startUpdatingLocation相同的方法alloc/init。这是真的吗?我
(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和StopUpdateLocation提供一个单独的方法。谢谢。你最初认为是正确的。如果您有一个实例变量,则该变量在对象的整个生命周期内(在本例中为您的应用程序委托)始终可用
如果你所做的不起作用,那是因为其他问题。您无需在每次致电startUpdating时分配新的CLLocationManager。不要过多地回避您的问题,但请理解,应用程序委托不应用于此类事情。将其添加到最有意义的控制器(即,根据您的层次结构,将其放在根视图控制器中可能是有意义的)。应用程序委托有一个有限的用途:设置应用程序,并仅处理特定事件。剩下的事你自己去做,其他地方。我想我假设appDelegate的一部分是像打开GPS一样设置应用程序,但我明白你的意思。我会改变的。