2

applicationDidEnterBackgroundで関数を呼びたいのですが、この関数は他のコントローラで定義されています。applicationDidEnterBackgroundで関数を呼び出す方法は?

私はそれにアクセスするオブジェクトを作っていますが、呼び出されると関数が殺されるようです。ここで

は、それが基本的に距離を計算し、通知

-(void)calculateDistance 
{ 

    for (NSMutableDictionary *obj in placeName) { 
     CLLocation *userLocation = [[AppHelper appDelegate] mLatestLocation]; 
     CLLocation *annotation1 = [[CLLocation alloc] initWithLatitude:[[obj objectForKey:@"Lat"]doubleValue] longitude:[[obj objectForKey:@"long"]doubleValue]]; 

     CGFloat distanceTemp = [annotation1 getDistanceFrom:userLocation]; 

     [obj setObject:[NSNumber numberWithFloat:distanceTemp] forKey:@"distance"]; 
     [annotation1 release]; 
    } 


    if ([placeName count]) 
    { 
     NSArray *sortedArray=[placeName sortedArrayUsingFunction:intSort context:NULL]; 
     self.placeName = [NSMutableArray arrayWithArray:sortedArray]; 
     NSMutableArray *arrayTemp = [[NSMutableArray alloc] initWithArray:placeName]; 


     for (int i =0; i < [placeName count]; i++) 
     { 
      //     NSArray *sortedArray=[placeName sortedArrayUsingFunction:intSort context:NULL]; 

      NSMutableArray *tempArray = [sortedArray objectAtIndex:i]; 
      //DLog(@"sortedArray%@", sortedArray);8= 
      NSNumber *DistanceNum = [tempArray objectForKey:@"distance"]; 
      NSLog(@"distance%@:::",DistanceNum); 
      NSInteger intDistance = (int)[DistanceNum floatValue]; 

      if(intDistance<500) 
      { 
       NSLog(@"ho gaya bhai"); 
       NSString *notifications [email protected]"Yes"; 
       [[AppHelper mDataManager] setObject:notifications forKey:@"notifications"]; 

       NSLog(@"notifications:%@",notifications); 
       RemindMeViewController *object = [[RemindMeViewController alloc] initWithNibName:@"RemindMeViewController" bundle:nil]; 
       // RemindMeViewController *object=[[RemindMeViewController alloc]initWithNibName]; 

       NSLog(@"notifications set"); 
       [object scheduleNotification]; 
      } 
      else 
      { 
       // [arrayTemp removeObjectAtIndex:i]; 
      } 
     } 

     //after for loop is ended 
     self.placeName= arrayTemp; 
     DLog(@"remaining",arrayTemp); 

     [arrayTemp release]; 
     [mTableView reloadData];  
    }  
} 
+0

この中で関数を定義する方法はありますか? – IphoneBites

+2

NSLog(@ "ho gaya bhai"); Abhi hua ki nahi? –

+0

ホガヤバイ! hAhahaha – IphoneBites

答えて

3

どのくらいあなたの関数が完了するまでに取っているがポストス機能ですか? applicationDidEnterBackground:でタスクを実行するのに5秒しかかかりません。 AppleのUIApplicationDelegate Protocol Referenceから

:この方法の

あなたの実装では、 に約5秒の任意のタスクを実行し、リターンを持っています。 最終タスクを実行するためにさらに時間が必要な場合は、beginBackgroundTaskWithExpirationHandler:を呼び出して、 システムから追加の実行時間をリクエストできます。 の練習では、できるだけ早くapplicationDidEnterBackground: として返さなければなりません。メソッドが時間の前に返されない場合、 はアプリケーションを終了し、メモリからパージします。

この方法が終了する前にユーザーインターフェイス を調整することに関連するタスクは実行する必要がありますが、必要に応じて を並行ディスパッチキューまたは2次スレッドに移動する必要があります。 applicationDidEnterBackgroundで開始するバックグラウンドタスクは、そのメソッド が終了するまで実行されないため、追加のバックグラウンド実行時間を要求してから これらのタスクを開始する必要があります。つまり、最初にbeginBackgroundTaskWithExpirationHandler:を呼び出してから、 ディスパッチキューまたはセカンダリスレッドでタスクを実行します。

+0

どのように機能が取っているかを確認することができますし、私たちはこれにタイマーを適用することもできます。 – IphoneBites

+0

@IphoneBites: 'NSTimer'を使い、コンソールにデュレーションを表示することで、どれくらいの時間がかかるかを確認できます。 – Stuart

+0

@IphoneBites:さらに良いことに、InstrumentsのTime Profilerを使用します。 – Stuart

2

私が知る限り、applicationDidEnterBackgroundに時間のかかる機能を呼び出すべきではありません。短い時間の後にアプリが停止するからです。バックグラウンド状態に入り、AppleのIOS Programming Guide

ほとんどのアプリケーションから

は、その後すぐにサスペンド状態に移動されます。この状態では、アプリケーションはコードを実行せず、いつでもメモリから削除することができます。ユーザーに特定のサービスを提供するアプリケーションは、それらのサービスを提供するためにバックグラウンド実行時間を要求できます。

Gool運:)

1

あなたは、これを試してみました例えばNSThreadを使用したり、いくつかのロジックがこのメソッド内で//

- (void)applicationDidEnterBackground:(UIApplication *)application { 
/* 
Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. 
If your application supports background execution, called instead of applicationWillTerminate: when the user quits. */} 

このメソッドを呼び出すために作るいる計算を呼び出そう位置のメソッドは動作するかもしれません(ここではnsthreadを試してください)

関連する問題