2013-08-20 199 views
0

我正在iOS上開發一款需要互聯網連接的遊戲。我遇到的問題是在播放器停止播放時在服務器(parse.com)上設置Bool。現在我在做這個...遊戲中的玩家停止遊戲

-(void)applicationDidEnterBackground:(UIApplication *)application 
{ 
    NSLog(@"Player logged out"); 
    [self playerLoggedOut]; 
} 

-(void)playerLoggedOut 
{ 
    PFUser *currentUser = [PFUser currentUser]; 

    if (currentUser) { 

     [currentUser setObject:[NSNumber numberWithBool:NO] forKey:@"playing"]; 

     [currentUser saveEventually]; 
     [sharedInstance requestSentWithDesc:@"Player logged out"]; 
    } 
} 

但是,這似乎並沒有工作,也有遊戲崩潰的情況,當我相信上面會永遠不會打電話。

還有......

-(void)applicationWillTerminate:(UIApplication *)application 

但我不知道什麼時候就這麼叫。

有使用計時器的可能性,但如果玩家永遠不會重新登錄或不長時間,我不知道如何使用計時器。

回答

0

對於您當前的處理,您需要啓動後臺任務(請參閱here),該任務在您發出請求之前開始,並在完成塊中結束(因此請更改您使用的保存方法)。

對於其他情況,這將不起作用,您可能希望添加某種「保持活動」消息和/或解析雲代碼,該代碼監視用戶交互並自動將它們註銷,如果它們對於設置時間。

+0

我試圖儘量避免使用雲代碼,因爲這會給所有事情增加另一層複雜性。我沒有得到的是我正在使用TestFlight,並且某種程度上SDK總是知道遊戲崩潰或結束的時間,所以在應用程序中必須有一種方法,或者是使用您提到的後臺任務的TestFlight? – Phil

+0

它將使用後臺任務和我處理的異常處理程序的組合。 – Wain

0

如果您的遊戲崩潰,您必須獲取任何日誌,例如: enter image description here 或其他內容。您可以在-(void)playerLoggedOutrequestSentWithDesc方法的末尾添加NSLog(@"worked to the bitter end!");

+0

當應用程序崩潰時,不會調用applicationWillTerminate。它基本上從不會被稱爲應用程序背景。 – Wain

+0

我正在使用TestFlight來記錄崩潰。 – Phil