2013-08-20 200 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