2011-09-15 26 views
0

私は、プロジェクトがバックグラウンドから削除されるまで、5分ごとに呼び出される関数を作成しています。関数を繰り返し呼び出す

私はNSTimerを実装しているが、それはクラッシュのように問題を作成し、いくつかの困難なものを管理するために、

ているすべての5分後にタイマーを使用せずに繰り返し関数を呼び出す方法はありますか?

私が見つけたアプローチの1つは、アラームサービスを使用することですが、実装方法はわかりません。

編集:サンプル1

IF([[NSUserDefaults standardUserDefaults] boolForKey: "IsUpdateConfigON" @] == TRUE){

 //NSLog(@"***************** One Timer to call UpdateConfig"); 

    NSString *updatedDate = [[NSUserDefaults standardUserDefaults] valueForKey:@"IsUpdateConfigLastUpdateTime"];  
    int time = [Global getTimeDiff:updatedDate]; 

     //NSLog(@"********************************** Timer value UPDATE CONGIF %d",time); 


    if(time >= 10){  

      //NSLog(@"****************** When time : %d >= %d :Config_Interval seconds ",time,Config_Interval); 
     cls_ConfigurationJSON *objConfig = [[cls_ConfigurationJSON alloc]init]; 
     [objConfig loadView]; 
     [objConfig release]; 
    } 
} 
時間は、時間のカウントダウンで

、1、2 、3など。この関数は、5分ごとに呼び出されます。

だから、いずれかの提案やコードがあれば私を助けてください。

+0

どのように 'NSTimer'を管理するのが難しいですか?あなたのクラッシュのいくつかのコードを投稿してください。 – Eimantas

答えて

2

NSTimerは、頻繁にメソッドを呼び出すのに好ましい方法です。発生するクラッシュは、オブジェクトのリリースやタイマーなどの無効化に関連する問題が原因である可能性があります。

+0

お返事ありがとうございました.NSTimerを除いて、今はより良いオプションがあります。正解ですか? –

+0

はい、おそらく理想的です。 – visakh7

1

NSTimerは、特定の期間の後に一部の関数を呼び出す場合には、本当に良いオプションです。コードを投稿することができれば、クラッシュの問題を解決しようとします。

スレッディングで可能なその他のオプションは、無限ループを作成してwait文を入れることです。

これから無限ループで関数を呼び出すことができます。

[NSThread detachNewThreadSelector:<#(SEL)selector#> toTarget:<#(id)target#> withObject:<#(id)argument#>]

、操作を実行した後、あなたはそれがこれを使用して5分間眠って作ることができます。

[NSThread sleepForTimeInterval:<#(NSTimeInterval)ti#>]

最後に、あなたのアプリケーションがバックグラウンドに移行したら、どのプロセスが長く、10分よりも実行できませんことを確認してください。だから、私はバックグラウンドから削除されるまでいくつかのプロセスを実行することはできません。

1

nstimerは別のスレッドで実行されるので最適なオプションです...これは私のコードで使用したものであり、問​​題はまったくありません。

{ 
[NSTimer scheduledTimerWithTimeInterval:5.0 
           target:self 
           selector:@selector(checkNetworkStatus:) 
           userInfo:nil 
           repeats:YES]; 

return YES; 
} 


- (void) checkNetworkStatus:(NSNotification *)notice 
{ 
// called after network status changes 

NetworkStatus internetStatus = [internetReachable currentReachabilityStatus]; 
switch (internetStatus) 

{ 
    case NotReachable: 
    { 
     NSLog(@"The internet is down."); 
     [email protected]"NO"; 
     break; 

    } 
    case ReachableViaWiFi: 
    { 
     NSLog(@"The internet is working via WIFI."); 
     [email protected]"YES"; 
     SyncRecords *obj=[[SyncRecords alloc]init]; 
     [obj syncData]; 
     break; 

    } 
    case ReachableViaWWAN: 
    { 
     NSLog(@"The internet is working via WWAN."); 
     [email protected]"YES"; 
     SyncRecords *obj=[[SyncRecords alloc]init]; 
     [obj syncData]; 
     break; 

    } 
} 

} 
関連する問題