私はアプリケーションにGPSを統合するためにtutorialに従っています。私はLatitude
とLongitude
の値をviewDidLoad
メソッドで表示したいと思います。チュートリアルによると、彼らは別の方法からそれを表示しています。しかし、それはviewDidLoad
に表示する必要があります。 viewDidLoad
に表示するには、次のコードを変更するにはどうすればよいですか?私のアプリケーションにGPSを統合する
HelloThereController.h
ビューコントローラ
#import "MyCLController.h"
@interface HelloThereViewController : UIViewController <MyCLControllerDelegate> {
MyCLController *locationController;
}
- (void)locationUpdate:(CLLocation *)location;
- (void)locationError:(NSError *)error;
@end
HelloThereController.m
ビューコントローラ
#import "HelloThereViewController.h"
@implementation HelloThereViewController
- (void)viewDidLoad {
locationController = [[MyCLController alloc] init];
locationController.delegate = self;
[locationController.locationManager startUpdatingLocation];
//I need to print the latitude and logitude values here..
}
マイMyCLController.hクラス
@protocol MyCLControllerDelegate
@required
- (void)locationUpdate:(CLLocation *)location;
- (void)locationError:(NSError *)error;
@end
@interface MyCLController : NSObject {
CLLocationManager *locationManager;
id delegate;
}
@property (nonatomic, retain) CLLocationManager *locationManager;
@property (nonatomic, assign) id delegate;
- (void)locationManager:(CLLocationManager *)manager
didUpdateToLocation:(CLLocation *)newLocation
fromLocation:(CLLocation *)oldLocation;
- (void)locationManager:(CLLocationManager *)manager
didFailWithError:(NSError *)error;
@end
マイMyCLController.mクラス
#import "MyCLController.h"
@implementation MyCLController
@synthesize locationManager;
@synthesize delegate;
- (id) init {
self = [super init];
if (self != nil) {
self.locationManager = [[[CLLocationManager alloc] init] autorelease];
self.locationManager.delegate = self;
}
return self;
}
- (void)locationManager:(CLLocationManager *)manager
didUpdateToLocation:(CLLocation *)newLocation
fromLocation:(CLLocation *)oldLocation
{
[self.delegate locationUpdate:newLocation];
}
- (void)locationManager:(CLLocationManager *)manager
didFailWithError:(NSError *)error
{
[self.delegate locationError:error];
}
- (void)dealloc {
[self.locationManager release];
[super dealloc];
}
@end
locationManagerが作成されるとすぐに利用可能な現在の場所に依存することはできません。「locationManager.location」はnilかもしれません。あなたがショーにリンクしたチュートリアルのように、ロケーションマネージャのデリゲートからこれを行う方がはるかに優れています。 –
ええ、それは私に0を与えます。しかし、私はviewDidLoadでそのデータを使用する必要があります。このための回避策はありますか?私もviewDidAppearでこれを追加しようとしましたが、viewDidLoadに表示しようとしましたが、同じ結果を返します – Illep
電話がどこにあるのかわからない場合は、その位置を決定するのに数秒かかるでしょう - それはちょうど方法ですです。 –