2

UISwitch使用してバックグラウンド サービスで位置を追跡するために使用される がありますnavigation controller。アプリを出たらうまくいきますが、ボタンをオンにしmain windowて位置追跡に戻ると停止します。

次のコードを使用しました。

-(IBAction)startTracking:(id)sender{
if(startTrackingButton.on){
   [locationManager startUpdatingLocation];}
else{
   [locationManager stopUpdatingLocation];
}}

- (void)viewDidLoad{
 [super viewDidLoad];
 locationManager = [[CLLocationManager alloc] init];
 [locationManager setDelegate:self];
 [locationManager setDesiredAccuracy:kCLLocationAccuracyBest];}

助言がありますか?

4

1 に答える 1

3

これは、ナビゲーション スタックに戻ったときに locationManager (UISwitch および UIViewController と同様) オブジェクトの割り当てが解除されているために発生しています。

これを確認するには、スイッチを使用してこのメ​​ソッドを viewController に追加します。

- (void) dealloc 
{

  NSLog(@"Object being destroyed");
}

「メイン ビュー」に戻ったときに「オブジェクトが破壊されています」と出力された場合は、問題の原因がわかります。

これを解決するには、スイッチ付きの UIViewController をメインの UIViewController のプロパティにします。このようにして、オブジェクトはアプリケーションの有効期間中に一度作成され、必要に応じてポップしてプッシュできます。

また、pushViewController コードを次のようにラップし、switchViewController疑似コードを格納するプロパティを作成する必要があります。

if(self.switchViewController)
{
    NSLog(@"switchViewController Already Created");
    [navigationController pushViewController:self.switchViewController];
}
else 
{
    self.switchViewController = [[UIViewController alloc] init];
    [navigationController pushViewController:switchViewController];
}

switchViewController プロパティが既にインスタンス化されていることを確認しないと、毎回新しいインスタンスを作成することになります。

ジョン

于 2013-08-15T10:02:25.163 に答える