0

ユーザーの友人が彼のハイスコアに挑戦し、ユーザーがそれを打ち負かすと、新しい挑戦で応答します (Apple によって、プログラムされていません)。他のユーザーは挑戦を受けますが、このチュートリアルのhttp://www.raywenderlich.com/23189/whats- new-with-game-center-in-ios-6

何か案は?

4

1 に答える 1

0

この時点で、_delegateがランダムなガベージ値ではないことを確認しますか?

if ([_delegate respondsToSelector:@selector(onScoresSubmitted:)])

callBackを使用するクライアント(デリゲート)がサーバーデリゲートをクリーンアップして、callBackが実行されないようにします。

これは2つの方法で行うことができます:

  1. A:サーバー側からデリゲートを保持します(ただし、デリゲート関係ではなくなります)。
  2. B:デリゲートクライアントがサービスを必要としなくなったときに、デリゲートポインタをnilに割り当てます。

実装が悪いためによくあるエラーは次のとおりです。

ADelegateClient* client = [ADelegateClient new];
[SingletonService service].delegate = (id<SingletonServiceDelegate>)client;
[client release];
// you must [SingletonService service].delegate = nil; Since
// [SingletonService service] cannot know the delegate is not pointing to something valid anymore
[[SingletonService service] makeStuffWillCauseCallBackToDelegate];

私はレイコードを読んでいませんでした、あなたの問題がこれに似ていないなら、私はさらに深く調べます。しかし、99%は、ポインタの割り当てが解除された問題に関連していると確信しています。

于 2012-10-14T12:32:24.087 に答える