私の場合、別のクラスの下にロケーション マネージャーがあり、メイン コントローラーからこのクラスを呼び出していました。これは機能せず、didUpdateLocations が呼び出されませんでした。
//
// LocationServices.h
//
#import <Foundation/Foundation.h>
#import <CoreLocation/CoreLocation.h>
@interface LocationServices : NSObject <CLLocationManagerDelegate> {
CLLocationManager *locationManager;
}
@property (nonatomic, retain) CLLocationManager *locationManager;
- (void)startLocationServices;
@end
// LocationServices.m
#import "LocationServices.h"
@implementation LocationServices
@synthesize locationManager, currentLocation;
- (void)startLocationServices {
locationManager = [[CLLocationManager alloc] init];
locationManager.delegate = self;
locationManager.pausesLocationUpdatesAutomatically = NO;
locationManager.desiredAccuracy = kCLLocationAccuracyNearestTenMeters;
if ([CLLocationManager locationServicesEnabled]) {
[locationManager startUpdatingLocation];
} else {
NSLog(@"Location services is not enabled");
}
}
////////////////////////////////////////////////
- (void)locationManager:(CLLocationManager *)manager
didUpdateLocations:(NSArray *)locations {
CLLocation* location = [locations lastObject];
NSLog(@"Updated: latitude %+.6f, longitude %+.6f\n",
location.coordinate.latitude,
location.coordinate.longitude);
}
@end
// Main controller
- (void)viewDidLoad {
[super viewDidLoad];
.....
LocationServices *locationSerices = [[LocationServices alloc]init];
[locationSerices startLocationServices];
......
}
上記のコードは機能しません。なんで?わかりません...単純なことをしようとして多くの時間を費やすと、簡単に興味を失う可能性があります。iOS は非常に複雑で使いにくいプログラミング環境です。1 つのことを行うには多くの方法がありますが、機能するのは 1 つだけです。問題を引き起こさずに組み合わせることはできません。あなたは本に従ってすべてをしなければなりません、さもなければあなたは何も得られません. あなたが何か間違ったことをしたというヒントさえありません...イライラします...
代わりに、メインコントローラーで locationManager:(CLLocationManager *)manager didUpdateLocations: を実装すると、すべて正常に機能しました