デバイスの位置を追跡するためにを使用iOS 6.1 iPhone app
するARC
有効化された状態で作業しています。CLLocationManager
アップデート
をDestinationViewController
実装するがありCLLocationManagerDelegate
ます。を作成CLLocationManager
し、セットアップを行います。プロジェクトにをインポートしCoreLocation framework
ました。
多くのデバッグを試みましたが、CLLocationManager
が作成され、エラーがないことがわかります。しかし、問題は、[CLLocationManager authorizationStatus]
がkCLAuthorizationStatusNotDetermined
前[self.locationManager startUpdatingLocation];
と後の両方にあるということです。したがって、このアプリの位置情報サービスを使用する許可を求めるプロンプトは表示されません。そのため、このメソッドは実行されません。
- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:
(NSArray *)locations
私はまた、同様の例を探すために何時間もWebを検索しようとしましたが、運がありませんでした。DestinationViewControllerからのコードは以下に掲載されています。
インターフェース
#import <UIKit/UIKit.h>
#import <CoreLocation/CoreLocation.h>
@interface DestinationViewController : UIViewController <CLLocationManagerDelegate>
実装
#import "DestinationViewController.h"
@interface DestinationViewController ()
@property (strong, nonatomic) CLLocationManager *locationManager;
@end
@implementation DestinationViewController
// Initializer
- (CLLocationManager *)locationManager
{
if (!_locationManager) {
_locationManager = [[CLLocationManager alloc] init];
}
return _locationManager;
}
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
[self startLocation];
}
- (void)startLocation
{
self.locationManager.delegate = self;
self.locationManager.desiredAccuracy = kCLLocationAccuracyBest;
self.locationManager.distanceFilter = 1;
NSString *error;
if (![CLLocationManager locationServicesEnabled]) {
error = @"Error message";
}
CLAuthorizationStatus status = [CLLocationManager authorizationStatus];
if (status == kCLAuthorizationStatusRestricted ||
status == kCLAuthorizationStatusDenied ||) {
error = @"Error message";
}
if (error) {
NSLog(error);
}
else
{
status = [CLLocationManager authorizationStatus];
self.locationManager.pausesLocationUpdatesAutomatically = NO;
[self.locationManager startUpdatingLocation];
status = [CLLocationManager authorizationStatus];
NSLog(@"CLLocationManager is %@", self.locationManager);
NSLog(@"Location is %@", self.locationManager.location);
[self updateUI];
}
}
- (void)locationManager:(CLLocationManager *)manager
didUpdateLocations:(NSArray *)locations
{
CLLocation *recentLocation = [locations lastObject];
NSLog(@"Found location");
}
- (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error
{
NSLog(@"didFailWithError");
}
- (void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status
{
NSLog(@"Change in authorization status");
}