2013-11-03 91 views
0

我正在學習本教程以創建一個顯示用戶位置的程序。我已經告訴Xcode爲我模擬了一個位置,甚至在模擬器上也確保它允許我的應用程序跟蹤位置。但是,沒有任何記錄到我的控制檯。Xcode 5 didupdatelocations無法正常工作

頭文件:

#import <UIKit/UIKit.h> 
#import <CoreLocation/CoreLocation.h> 

@interface WhereamiViewController : UIViewController <CLLocationManagerDelegate> { 
    CLLocationManager *locationManager; 
} 

@end 

和主文件:

#import "WhereamiViewController.h" 

@implementation WhereamiViewController 

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 
{ 
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 

    if (self) { 
     locationManager = [[CLLocationManager alloc] init]; 
     [locationManager setDelegate:self]; 
     [locationManager setDesiredAccuracy:kCLLocationAccuracyBest]; 
     [locationManager setPausesLocationUpdatesAutomatically:NO]; 
     [locationManager startUpdatingLocation]; 
    } 

    return self; 
} 

- (void)locationManager:(CLLocationManager *)manager 
    didUpdateLocations:(NSArray *)locations 
{ 
    NSLog(@"%@", [locations lastObject]); 
} 

- (void)locationManager:(CLLocationManager *)manager 
    didFailWithError:(NSError *)error 
{ 
    NSLog(@"Error: %@", error); 
} 

@end 
+0

[CLLocationManager不會將位置發送到didUpdateLocations方法](http://stackoverflow.com/questions/15656889/cllocationmanager-does-not-send-location-to-the-didupdatelocations-method) –

+0

@ josh它工作,如果我把我的代碼到viewDidLoad,但不是當它在initWithNibName。這是爲什麼?最初initWithNibName甚至沒有被調用,所以我把它設置在我的AppDelegate.m中'WhereamiViewController * wvc = [[WhereamiViewController alloc] initWithNibName:@「WhereamiViewController」bundle:nil];' – Thomas

回答

1

我不是100%肯定的答案,但是這是我有。
僅當應用處於前景時,iOS 7才允許進行位置獲取。 當您在initwithNibName中編寫代碼時,您的應用程序實際上並不處於前臺,它正在從xib文件和全部文件創建控件。這就是操作系統未給您位置更新的原因。

+0

這對我來說是這樣。我在'application didFinishLaunchingWithOptions'的第一次測試期間調用了'startUpdatingLocation',這似乎爲時尚早。從一個按鈕調用它之後,一切按預期工作。 –