簡體   English   中英

如何使用目標c停止和啟動app委托計時器?

[英]How to stop and start app delegate timer using objective c?

我在我的應用程序登錄和注銷過程中我在后台計時器服務過程中遇到了很多問題。 下面的代碼我在applicationDidBecomeActive時維護通知和JSON服務后台。

-(void)applicationDidBecomeActive:(UIApplication *)application
{
    checkJSONtimer = [NSTimer scheduledTimerWithTimeInterval:300 target:self selector:@selector(updateJSON) userInfo:nil repeats:TRUE];
    NSLog(@"%s", __PRETTY_FUNCTION__);
    application.applicationIconBadgeNumber = 0;
}

問題如下

  1. 登錄前,計時器活動已開始
  2. 注銷后,計時器活動不會停止
  3. 如果我在后面的定時器上注釋到后台進入活動狀態,那么定時器不工作
  4. 每次沒有logout ,清除background app再次運行打開我可以從login

FYI :以上計時器選擇器方法我保持在三個以下的位置

1. application didFinishLaunchingWithOptions
2. applicationDidBecomeActive
3. applicationDidEnterBackground

如何解決上述問題。 請幫我!

  1. 登錄前,計時器活動已開始

為此,您必須檢查用戶是否登錄應用程序。例如

 -(void)applicationDidBecomeActive:(UIApplication *)application{ if(isUserLogedIn) { checkJSONtimer = [NSTimer scheduledTimerWithTimeInterval:300 target:self selector:@selector(updateJSON) userInfo:nil repeats:TRUE]; NSLog(@"%s", __PRETTY_FUNCTION__); application.applicationIconBadgeNumber = 0; } } 
  1. 注銷后,計時器活動不會停止

    為此,制作一個通知,當用戶從應用程序注銷時將觸發通知。當通知觸發計時器無效時。[myTimer inValidate]。

  2. 如果我在后面的定時器上注釋到后台進入活動狀態,那么定時器不工作

    無需評論計時器。只需有效管理計時器。

  3. 每次沒有注銷,清除后台應用程序再次運行打開我可以從登錄。

    為此,您必須在NSUserDefault中管理用戶會話。如果值不為空,請檢查該值,自動登錄用戶。

如果你想取消計時器你可以使用這樣的東西:

AppDelegate* appDelegate = (AppDelegate *)[UIApplication sharedApplication].delegate;

[appDelegate.checkJSONtimer invalidate]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM