1

私は自分の場所を管理するために別のクラスを実装しようとしていました。ボタンをクリックするたびに自分の位置を取得したかったのです。

gpsFilter.h

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

@interface gpsFilter : NSObject <CLLocationManagerDelegate>

@property (nonatomic, retain) CLLocationManager *gpsManager;
@property (nonatomic, retain) NSString * latitude;
@property (nonatomic, retain) NSString * longitude;
@end

gpsFilter.m

#import "gpsFilter.h"

@implementation gpsFilter

- (id) init{
self = [super init];
if(self != nil){
    self.gpsManager = [[CLLocationManager alloc] init];
    self.gpsManager.delegate = self;
    [self.gpsManager startUpdatingLocation];
    BOOL enable = [CLLocationManager locationServicesEnabled];
    NSLog(@"%@", enable? @"Enabled" : @"Not Enabled");
}
return self;
}

- (void)gpsManager:(CLLocationManager *) manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation{
NSLog(@"didUpdateToLocation: %@", newLocation);
CLLocation *currentLocation = newLocation;
if(currentLocation != nil){
    self.latitude = [NSString stringWithFormat:@"%.8f", currentLocation.coordinate.longitude];
    self.longitude = [NSString stringWithFormat:@"%.8f", currentLocation.coordinate.latitude];
}
}

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

将来、平滑化フィルターを追加したかったので、別のクラスを使用しています。更新がありません。NSLogがトリガーされることはありません。一部の変数が自動リリースされていると思いますが、どれかはわかりません。

viewControllerのコードは次のとおりです。

#import "gpstestViewController.h"

@interface gpstestViewController (){

}

@end

@implementation gpstestViewController


- (void)viewDidLoad
 {
[super viewDidLoad];
self.location = [[gpsFilter alloc] init];
// Do any additional setup after loading the view, typically from a nib.
}


- (IBAction)getloca:(id)sender {
self.latitudeLabel.text = [self.location latitude];
self.longitudeLabel.text = [self.location longitude];

}

- (IBAction)getLocation:(id)sender {
self.latitudeLabel.text = [self.location latitude];
self.longitudeLabel.text = [self.location longitude];

}
@end

たくさんのコードをダンプして申し訳ありませんが、私はiOSプログラミングの初心者であり、問​​題が何であるかを見つけることができません。

編集:updateLocationデリゲートメソッドはまったく呼び出されていません。

4

2 に答える 2

2

didUpdateToLocationの署名が間違っています:これは私のコードです:

/** Delegate method from the CLLocationManagerDelegate protocol. */
- (void)locationManager:(CLLocationManager *)manager
    didUpdateToLocation:(CLLocation *)newLocation 
           fromLocation:(CLLocation *)oldLocation    
{
  // here do 
}

さらにをに設定desiredAccuracyCLLocationAccuracyBestます。

于 2013-02-13T16:37:56.923 に答える
2

デリゲートメソッドには、とという名前を付ける必要がlocationManager:didUpdateToLocation:fromLocation:ありlocationManager:didFailWithError:ます。

のようなカスタムメソッド名は使用できませんgpsManager:didUpdateToLocation:fromLocation:


また、これlocationManager:didUpdateToLocation:fromLocation:はiOS 6で非推奨になり、を使用する必要があることに注意してくださいlocationManager:didUpdateLocations:

于 2013-02-13T16:47:28.067 に答える