2012-04-01 7 views
1

私はアプリケーションで新たに実装された位置処理を行い、フォアグラウンドとバックグラウンドで満足のいく結果をテストします。アプリケーションは、重要な場所の変更だけでなく、いくつかの地域を監視しています。アプリが一時停止または終了したときに同じ結果が得られるかどうかはまだ分かりません。 私が理解しているように、これらの状態からアプリが起動すると、launchOptionsLocationキー以外のアプリケーションがlaunchOptions Dictionaryのparamに見つかるようになります。私の質問は、私は、アプリケーションの代理人が正常に進んで、すべてがうまくいると仮定することができますか?すべてのビュー設定コードをインターセプトする必要がありますか?didFinishLaunchingWithOptionsを最小化するlaunchOptionsLocationキーディスカバリでの処理は?

私のdidFinishLaunchingWithOptionsで非常に最初の行:launchOptions方法は次のとおりです。

NSManagedObjectContext *context = [self managedObjectContext]; 
if (!context) { 
    //Handle Error 
} 

self.sharedLocationHandler = [[[TTLocationHandler alloc] init] autorelease]; 
self.siteLogger = [[[ProjectSiteLogger alloc] initWithOptions:nil] autorelease]; 
self.siteLogger.locationHandler = self.sharedLocationHandler; 
self.siteLogger.managedObjectContext = context; 

すべての可能性では、これは私が場所のイベントに対応するために必要なものをすべてカバーしています。私はlaunchOptions内の位置キーを簡単にテストし、メソッドの残りの部分をスキップすることができますが、予期せぬ複雑さがどのような複雑さを伴うのか分かりません。 また、ユーザーが、ビューがまったく設定されていない不完全な状態にあったときに意図的にアプリを起動した場合に、何が起こるかという質問もあります。

これは試したことですか、それはまったく必要なのでしょうか?アプリケーションが中断されたときにXcodeデバッガに接続しておく方法がわからないため、これをテストする方法はわかりません。

---追加の更新情報----周りのテストの携帯電話を運ぶの日に

初期のテストでは、私の場所の処理は、私がappDelegateを変更することなくそれを望んでいたすべてのタスクを行うように見えました。だから、私は、サスペンド/タームからの復帰が起きて、ビューコントローラが見えなくなったにもかかわらず完全なappDelegateプロシージャを実行したと推測します。 スタートアッププロシージャを変更する必要はないようですが、appDelegateプロシージャを短くして処理を最小限に抑えることを賢明にするパフォーマンスやバッテリの懸念が依然としてありますか?

答えて

1

はテストと微調整の良いビットの後、私は見つける:

  1. アプリがアクティブでない、またはまったく問題に呼ばれるから復帰します。
  2. App Delegateの変更に関係なく、私のロケーションメソッドが実行され、完了しました。
  3. 私はアプリケーションデリゲートプロセスを短くすると、間欠的な開始の問題が予想通りに発生しました。

明らかなパフォーマンス上の利点はありませんでしたが、アプリケーションがフォアグラウンドで表示されていない限り、実行されないようにビュー設定コードを分けてフラグを追加しました。必要以上に処理を実行するのは正しいと思われます。 私がなってしまったコードは次のとおりです。

// Initialize a flag 
BOOL needsViewsSetup = YES; 

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{ 
    // All my response to location events are handled in the these two classes 
    self.sharedLocationHandler = [[[TTLocationHandler alloc] init] autorelease]; 
    self.siteLogger = [[[ProjectSiteLogger alloc] initWithOptions:nil] autorelease]; 
    self.siteLogger.locationHandler = self.sharedLocationHandler; 
    self.siteLogger.managedObjectContext = self.managedObjectContext; 

    // check launchOptions, skip all the views if there we were woken by location event 
    if (![launchOptions objectForKey:UIApplicationLaunchOptionsLocationKey]) { 
     [self confirmDataExistsAtStartup]; 
     [self setupTabbarWithViews]; 
    } 

    return YES; 
} 

次に、あなたは、ビューの設定があります。

- (void)applicationWillEnterForeground:(UIApplication *)application 
{ 
     if (needsViewsSetup) { 
      [self setupTabbarWithViews]; 
     } 
} 

注:私のアプリケーションではありません

-(void)setupTabbarsWithViews 
{ 
    // Code to setup initial views here 

    // ending with flag toggle to prevent repeat processing 
    needsViewsSetup = NO; 
} 

とアプリケーションでのフォアグラウンドを入力しますロケーションサービスをバックグラウンドで実行し、重要なロケーションの変更とジオフェンスだけをリッスンします。

関連する問題