Objective-C 无法调用 Game Center 中的函数

标签 objective-c ios call game-center

我在尝试通过 Game Center 在我的 iPhone 应用程序上实现让两名玩家相互对战的能力时遇到了一场噩梦。

我只是想从我拥有的另一个 .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 reliable: YES];没有被调用的。他们以前是,我显然以某种方式搞砸了。我可以看到随机数字符串的 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。

最佳答案

我最好的猜测是 self.gcManagernil。您在哪里实例化您的 GameCenterManager

关于Objective-C 无法调用 Game Center 中的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14115392/

相关文章:

iphone - UISearchBar 中的清除按钮

iphone - NSManagedObject 到 JSON

ios - UITableView 单元格仅显示 1 个单元格

ios打开通话记录

android - 在 Android on call 中禁用屏幕触摸

objective-c - 导航 Controller 标题

objective-c - 将临时对象添加到 NSMutableArray

iphone - 如何在点击 xcode 时增加一些内容

android - 为什么 WhatsApp 这样的应用程序的下载和上传速度不同?

python - 在特定时间为 Django/Python 调用方法?