2013-08-20 46 views
0

我有一个运行时,我的代码崩溃的异常处理程序,但我也需要一个MSG发送到服务器(parse.com)当发生这种情况,让服务器知道玩家已经停止播放,如何在异常处理程序中运行方法?

void onUncaughtException(NSException *exception) 
{ 
    NSLog(@"uncaught exception: %@", exception.description); 
    [self playerLoggedOut]; 
} 

playerloggedOut行给出了未声明的标识符self的错误。

我怎样才能运行playerLoggedOut方法,当发生异常?

回答

1

如何在发生异常时运行playerLoggedOut方法?

您无法启动一些冗长的过程,如建立网络连接和发送消息。您的最佳策略可能是保存信息并在应用程序再次启动时发送,以便服务器可以更新其记录或任何其他信息。或者,让客户端每隔t秒与服务器签入;如果服务器在某个时间间隔(如2t)内没有收到客户端的消息,则认为客户端已停止运行。

1

首先:self是未知的,因为你不是一个方法,而是一个功能。函数不在对象上下文中运行,因此不知道自己。

正如迦勒前面提到的,你应该有服务器端看门狗自动登录一个球员出来,如果服务器没有得到来自客户端的消息一会儿(以秒为单位)。为防止自动注销,当用户处于禁用状态(但仍在播放)时,可以使用NSTimer的实例在客户端上实现心跳。

0

正如其他人所指出的,不要试图做昂贵的东西喜欢说话的解析服务器在您的异常处理程序。

在问候你实际上是试图实现,你可能要重新考虑你的架构。

在移动设备中的有时连接的世界中,你将有你的连接来来去去。请考虑UTC日期时间为LastUserActivity,而不是使用布尔标志IsLoggedIn,并使用一条规则说明如果最后一次活动在最后5分钟内,或者任何合适的时间,都会被视为已登录。

如果所有对Parse的访问均通过Cloud Code完成,那么您可以轻松添加一个函数调用,将LastUserActivity设置为每种方法,然后您也可以避免时间同步问题,因为您始终使用服务器时钟。

如果您想获得所有在线用户的列表,则可以查询LastUserActivity大于5分钟前的位置(或您设置的任何限制)。

相关问题