0

これは私を夢中にさせています。Game Center でローカル プレイヤーを認証しようとするたびに、スレッド 1 の sigkill が発生します。localPlayerを次のauthenticateHandlerように設定した後、非同期に発生します。

- (void)authenticateLocalPlayer
{
    if([[[UIDevice currentDevice] systemVersion] floatValue] >= 6.0)
    {
        GKLocalPlayer __weak *localPlayer = [GKLocalPlayer localPlayer];
        localPlayer.authenticateHandler = ^(UIViewController *viewController, NSError *error)
        {
            if (viewController != nil)
            {
                [[[[[UIApplication sharedApplication] delegate] window] rootViewController] presentViewController:viewController animated:YES completion:nil];
            }
            else if (localPlayer.isAuthenticated)
            {
                NSLog(@"Player authenticated");
            }
            else
            {
                NSLog(@"Player authentication failed");
            }
        };
    }
}

何か案は?

4

3 に答える 3

0

数値比較ではなく文字列比較で systemVersion がテストされているのをよく見てきました。の値を印刷してみてください

[[[UIDevice currentDevice] systemVersion] floatValue] >= 6.0

その式に問題がないことを確認します。次の方法が機能することを知っています。

-(BOOL) os6 {
    NSString *targetSystemVersion = @"6.0";
    NSString *currentSystemVersion = [[UIDevice currentDevice] systemVersion];
    if ([currentSystemVersion compare:targetSystemVersion options:NSNumericSearch] == NSOrderedAscending) {
        return NO;  //current system version is less than 6.0
    } else {
        return YES;
    }
}
于 2013-08-08T18:29:44.117 に答える
0

[GKLocalPlayer localPlayer] はシングルトンを返し、__weak はある時点でそれを解放します (それがいつ起こるかはわかりませんが、将来のある時点で)。ブロックの実行が完了する前に、localPlayer がブロックと共に解放される可能性があります。シングルトンをリリースする必要はありません。__weak を削除してみてください。

于 2013-08-10T01:38:43.067 に答える
0

__weakの前に置いてみてくださいGKLocalPlayer

あなたのコードと私が使用しているコードとの間で私が見ることができる唯一の違いです...

于 2014-07-29T02:49:20.657 に答える