1

私はiPhone4で実行されているそのコードを使用しています:

- (id)init
{
    self = [super initWithNibName:@"OfflineView" bundle:nil]; // ok, not perfect but for test, that works fine
    if (self) {
        self.locationMgr = [[CLLocationManager alloc] init];
        self.locationMgr.desiredAccuracy = kCLLocationAccuracyThreeKilometers;
        self.locationMgr.distanceFilter = kCLDistanceFilterNone;
        self.locationMgr.headingFilter = kCLHeadingFilterNone;

        self.locationMgr.delegate = self;
    }
    return self;
}

- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
{
    // do things
}

// triggered when showing the view, first call here after the init
- (void) start
{
    self.view.hidden = NO;
    [self.locationMgr startUpdatingLocation];
    [self.locationMgr startUpdatingHeading];
}

ただし、デリゲートメソッドはトリガーされません。
電話が動いたときにのみトリガーされます。

ビューが表示されたときに、何かを実行する前に、ユーザーに電話を振って100メートル走らせることなく、有効なユーザーの場所でプロセスを開始するにはどうすればよいですか?

4

2 に答える 2

2

デリゲートメソッドを自分で一度キックすることで、それを「プライミング」することができます。

- (void) start
{
    self.view.hidden = NO;
    [self.locationMgr startUpdatingLocation];
    [self.locationMgr startUpdatingHeading];
    [self locationManager: self.locationMgr didUpdateToLocation: [self.locationMgr currentLocation] fromLocation: nil];
}
于 2011-08-30T21:54:58.507 に答える
0

どこからスタートと呼びますか?移動せずに最初の修正を取得する必要があります。これは非同期のコールバックであるため、時間がかかる場合があります。

理想的には、init / viewDidLoadでstartUpdateLocationを呼び出してから、locationUpdateでそれを読み取る必要があります。

- (void)locationUpdate:(CLLocation *)location {

 //   Read location

}
于 2011-08-30T21:58:41.567 に答える