2013-12-23 74 views
1

這是一個位置應用程序。當我第一次在iPhone上運行應用程序時,一個警告窗口詢問我是否想允許定位服務。選擇好後或不允許我可以點擊一個設置的按鈕來顯示我的當前位置。該按鈕還設置爲將一個NSLog打印到控制檯,其值爲一個名爲「locationServicesEnabled」的BOOL函數,如果它們是,則返回yes/1,否則返回0。當NSLog使用BOOL方法返回false時,BOOL方法返回true

我的問題是,當我選擇不允許選項,並且我按下按鈕時,NSLog仍然將值1打印到不正確的控制檯。它應該是0或false。連接到我的按鈕文字標籤,甚至說:「你的位置是空」,但由於某些原因的NSLog始終顯示的1

這裏是我的ViewController.m代碼BOOL值:

#import "ViewController.h" 
#import <CoreLocation/CoreLocation.h> 

@interface ViewController() <CLLocationManagerDelegate> 

-(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations; 

@end 

@implementation ViewController 

- (void)viewDidLoad 
{ 

[super viewDidLoad]; 

self.gpsLM = [[CLLocationManager alloc]init]; 

[self.gpsLM startUpdatingLocation]; 

} 

- (void)didReceiveMemoryWarning 

{ 
[super didReceiveMemoryWarning]; 
} 


-(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations{ 


} 

-(IBAction)gpsButton{ 

CLLocation * currentLocation = self.gpsLM.location; 

self.gpsLabel.text = [NSString stringWithFormat:@"Your Location is %@", currentLocation]; 

NSLog(@"Location services enabled: %hhd",[CLLocationManager locationServicesEnabled]); 

} 

@end 

回答

1

您需要檢查[CLLocationManager authorizationStatus]而不是locationServicesEnabled。授權狀態返回以下應用程序特定值中的一種:

typedef enum { 
    kCLAuthorizationStatusNotDetermined = 0, 
    kCLAuthorizationStatusRestricted, 
    kCLAuthorizationStatusDenied, 
    kCLAuthorizationStatusAuthorized 
} CLAuthorizationStatus; 

這些名稱有希望不言自明。

+0

謝謝!這就是訣竅,它正在顯示正確的值。 – user3117509

0

我剛想出了我自己問題的答案。如果iPhone的位置服務選項被完全禁用,bool函數將僅返回一個錯誤的值。如果您僅禁用了1個應用程序,但啓用了主功能並讓其他應用程序使用它,則它仍會返回值1.它看起來像locationServicesEnabled方法是設備特定的,而不是應用程序特定的。