0

ローカルプレイヤーのエイリアス(またはその問題のテキスト)を別のデバイスに送信する最良の方法は、 ARC /ポインタ?プレイヤーエイリアス(Game Center)をARCで構造体経由で送信

これまでは、__unsafe_unretained-オプションを使用してテキストを格納するchar配列から&に変換しようとしましたが、これらの3つの試みはすべてコンパイルに失敗しましたが、デバイスがクラッシュしました(シミュレータは動作を続けますが、エイリアスは表示されません)。ARCを使用する場合、マルチプレイヤーゲームでテキストを送信するのは本当に難しいですか?私が直面している問題は、私がプログラミングにあまり経験していないという事実の結果である可能性が最も高いです...誰かが正しい方向に私を指すことができたり、コードの一部を私に提供できれば、本当に感謝します。

+0

フォローアップ:私は現在ゲームセンターからエイリアスを取り出しています。私はARCを使って構造体を通してテキストを送る方法を理解しようとしていました。誰かが簡単な方法を知っているなら、私に知らせてください。 – user1197754

答えて

1

文字列をNSDataオブジェクトに簡単にエンコードしてデコードし、Game Centerでそれらを送信することができます。符号化した文字列

- (NSData *)dataUsingEncoding:(NSStringEncoding)encoding 

にこの方法を使用する:符号化するために

をNSUTF8StringEncodingこれは復号するNSDataオブジェクト

を返すであろう。

NSString *dataString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; 

編集:

基本的にあなたが明示的にプレーヤーのエイリアスを送信する必要はありませんよ。

1:2例ありGKTurnBasedMatch

あなたはこれを使用している場合は、その後、ここでエイリアスのすべてのリスト(を含むあなたの)

NSMutableArray *playerIds = [NSMutableArray arrayWithCapacity:match.participants.count]; 

for (GKTurnBasedParticipant *part in match.participants) { 

if([participant.playerID isKindOfClass:[NSString class]]){ 
       [playerIds addObject:part.playerID]; 
      } 
} //at this point you have an array full of playerID strings, next you call this: 

[GKPlayer loadPlayersForIdentifiers:(NSArray *)playerIds withCompletionHandler:(void (^)  (NSArray *players, NSError *error))completionHandler { 

for (GKPlayer *playa in players) { 

NSLog(@"%@",playa.alias); // here i'm just logging the aliases but you can do whatever.. 
} 


}]; 

2.GKMatchを取得する方法は次のとおりです。あなたのGKMatchは既に以前と同じようにplayerIDs配列を持っているので、このケースははるかに簡単です:

[GKPlayer loadPlayersForIdentifiers:(NSArray *) match.playerIDs withCompletionHandler:(void (^)(NSArray *players, NSError *error))completionHandler { 

//again you get the array players full of GKPlayer objects , simply pull the alias you want 

}]; 
関連する問題