Game Center を介して iPhone アプリで 2 人のプレイヤーが互いに対戦する機能を実装しようとして、少し悪夢に見舞われています。
私が持っている別の .m ファイルから GameCenterManager.m 内の関数にアクセスしようとしているだけです。私の racetohundredViewController.h ファイルには次のものがあります。
#import <UIKit/UIKit.h>
#import "startPage.h"
#import "GameCenterManager.h"
#import <GameKit/GameKit.h>
@interface racetohundredViewController : UIViewController <UIActionSheetDelegate, GKLeaderboardViewControllerDelegate, GameCenterManagerDelegate>
{
GameCenterManager *gcManager;
BOOL gameIsMultiplayer;
double randomHostNumber;
}
@property (retain, nonatomic) GameCenterManager *gcManager;
対応する .m ファイルには次のものがあります。
@interface racetohundredViewController ()
@end
@implementation racetohundredViewController
@synthesize gcManager;
- (void)generateAndSendHostNumber;
{
NSLog(@"Generate and send host number");
randomHostNumber = arc4random();
NSString *randomNumberString = [NSString stringWithFormat: @"$Host:%f", randomHostNumber];
NSLog(@"the random number string is: %@", randomNumberString);
[self.gcManager testString];
[self.gcManager sendStringToAllPeers:randomNumberString reliable: YES];
}
- (void)viewDidLoad
{
[self generateAndSendHostNumber];
}
[self.gcManager testString] です。および [self.gcManager sendStringToAllPeers:randomNumberString 信頼できる: はい]; 呼び出されていません。それらは以前のものでした。私は明らかにそれを何らかの形で台無しにしました。乱数文字列の NSLog を確認できます。
私の GameCenterManager.h ファイルには次のものがあります (この問題に関係のないいくつかのビットを含む):
#import <Foundation/Foundation.h>
#import <GameKit/GameKit.h>
@class GKLeaderboard, GKAchievement, GKPlayer;
@protocol GameCenterManagerDelegate <NSObject>
@optional
- (void) processGameCenterAuthentication: (NSError*) error;
- (void) scoreReported: (NSError*) error;
- (void) reloadScoresComplete: (GKLeaderboard*) leaderBoard error: (NSError*) error;
- (void) achievementSubmitted: (GKAchievement*) ach error:(NSError*) error;
- (void) achievementResetResult: (NSError*) error;
- (void) mappedPlayerIDToPlayer: (GKPlayer*) player error: (NSError*) error;
- (void) receivedData:(NSDictionary *)dataDictionary;
@end
@interface GameCenterManager : NSObject <GameCenterManagerDelegate>
{
id <GameCenterManagerDelegate, NSObject> delegate;
NSMutableDictionary* earnedAchievementCache;
id matchOrSession;
}
//This property must be atomic to ensure that the cache is always in a viable state...
@property (retain) NSMutableDictionary* earnedAchievementCache;
@property (nonatomic, strong) id <GameCenterManagerDelegate, NSObject> delegate;
@property(nonatomic, strong) id matchOrSession;
+ (BOOL) isGameCenterAvailable;
- (void) authenticateLocalUser;
- (void)sendStringToAllPeers:(NSString *)dataString reliable:(BOOL)reliable;
- (void)sendString:(NSString *)dataString toPeers:(id)peers reliable: (BOOL)reliable;
-(void)testString;
最後に、GameCenterManager の .m ファイルの縮小版:
#import "GameCenterManager.h"
#import <GameKit/GameKit.h>
@implementation GameCenterManager
@synthesize earnedAchievementCache;
@synthesize delegate;
@synthesize matchOrSession;
-(void)testString
{
NSLog(@"THIS IS A TEST");
}
sendString に関するコードを投稿することもできますが、原則として、基本的な testString 関数を使用してもそれを呼び出していません。
ここで非常に明白な何かが欠けていますか? コードをステップ実行すると、GameCenterManager の .h ファイル内の関数が強調表示されるように見えますが、要求したとおりに NSLog が表示されません。