Takahiro Octopress Blog

-1から始める情弱プログラミング

iOS7とNSTimerと位置情報の取得について

iOS7で定期間隔での位置情報取得

本日は一言メモ程度に書きます。
Backgroundで位置情報を取得しよう!で紹介したNSTimerで定期時間ごとに位置情報を取得してみよう!の部分についてiOS7での注意しなければいけないことがありました。

Background起動で位置情報の取得を可能な設定にしておくと、NSTimerが永続的に動くことについては以前お伝えしました。
このNSTimerで設定した定期間隔ごとに下記のように位置情報の取得ができました。

1
2
3
4
5
CLLocation *location = [locationManager location];
CLLocationCoordinate2D coordinate = [location coordinate];// 座標を取得
NSString *lat = [NSString alloc] initWithFormat:@"%f", coordinate.latitude];  // 経度を取得
NSString *lng = [NSString alloc] initWithFormat:@"%f", coordinate.longitude]; // 緯度を取得
NSLog(@"+++++ [デリゲートによらない場合]緯度,经度: %@, %@", lat, lng);

しかし、iOS7ではある記述をしないとうまくいかないことがわかりました。

それはdidUpdateLocationsメソッドです。
つまり、

1
2
3
4
5
- (void)locationManager:(CLLocationManager *)manager
   didUpdateLocations:(NSArray *)locations
{
  
}

の記述が必要なんです。
これがなかったとしても、NSTimer自体は動くので、処理は定期的に実行されます。
が、位置情報の値が全く更新されません
iPhoneを持って移動したとしても、1回目に取得した位置情報の値から変化がないのです。

もし、NSTimerを使った定期間隔での位置情報の取得をiOS7で行うのであれば、このことには十分に注意してください。

Comments