当我在iphone中安装我的应用程序并第一次运行时,它会询问用户对核心位置服务的许可。这是模拟器的图像。
在我的应用程序中,我的第一个应用程序视图需要当前位置,并根据位置列出一些事件。如果应用程序无法获取位置,则会显示默认的事件列表。
所以,我想知道在用户点击“Don't allow
”或“ok
”按钮之前是否可以保留申请流程?
我知道如果用户点击“不允许”,那么kCLErrorDenied
错误将被解雇。
目前会发生什么,如果用户没有点击任何按钮,应用程序会显示列表页面的默认列表(没有位置)。之后,如果用户点击“ok
”按钮,则没有任何反应!如何在“ok
”按钮单击时刷新页面?
...谢谢
答案 0 :(得分:1)
是的,在调用这些委托方法之前,不要做任何事情。当他们单击“确定”时,这只是Cocoa的信号,然后尝试检索用户的位置 - 您应该构建应用程序,以便当CLLocationManager有位置或无法获取位置时,您的应用程序将继续。 / p>
您不想说,暂停您的应用,直到该位置返回/失败;那不是面向对象的开发。
答案 1 :(得分:0)
在您的视图逻辑中等待,直到调用didUpdateToLocation或didFailWithError的CoreLocation委托。让这些方法调用/ init您的列表和UI数据填充。
样本控制器:
标题
@interface MyCLController : NSObject <CLLocationManagerDelegate> {
CLLocationManager *locationManager;
}
@property (nonatomic, retain) CLLocationManager *locationManager;
- (void)locationManager:(CLLocationManager *)manager
didUpdateToLocation:(CLLocation *)newLocation
fromLocation:(CLLocation *)oldLocation;
- (void)locationManager:(CLLocationManager *)manager
didFailWithError:(NSError *)error;
@end
代码
#import "MyCLController.h"
@implementation MyCLController
@synthesize locationManager;
- (id) init {
self = [super init];
if (self != nil) {
self.locationManager = [[[CLLocationManager alloc] init] autorelease];
self.locationManager.delegate = self; // send loc updates to myself
}
return self;
}
- (void)locationManager:(CLLocationManager *)manager
didUpdateToLocation:(CLLocation *)newLocation
fromLocation:(CLLocation *)oldLocation
{
NSLog(@"Location: %@", [newLocation description]);
// FILL YOUR VIEW or broadcast a message to your view.
}
- (void)locationManager:(CLLocationManager *)manager
didFailWithError:(NSError *)error
{
NSLog(@"Error: %@", [error description]);
// FILL YOUR VIEW or broadcast a message to your view.
}
- (void)dealloc {
[self.locationManager release];
[super dealloc];
}
@end