不保存和/或读取游戏中心基于回合的匹配数据

时间:2013-02-11 21:58:13

标签: objective-c ios6 game-center

我计划开发一款回合制游戏,并试图了解如何与游戏中心进行通信以及发送和接收马赫数据。我已经阅读了它并对它进行了几天的测试,并且无法让它按计划运行。

我尝试使用下面的代码唯一能够保存然后读取马赫数据。我正在使用两个沙盒游戏中心帐户进行转弯。

按下“endTurn”按钮,转弯发送相同的数据。每次我运行实际用户都经过身份验证,应用程序设置正确(我相信)。

这是一个测试应用程序没有任何其他目的,而不是测试我说的。下面是我用于匹配数据处理的代码。

我真的很感激我可能做错的任何想法和提示。在我开始认真测试之前,我确实发布了一个类似的问题,但没有解决这个问题,https://stackoverflow.com/questions/14447392/start-gamecenter-turn-based-match-and-initiate-match-data-for-the-very-first-tim

我也试图抓住参与者,但没有成功,这可能意味着处理完成处理程序时会出现问题。

-(IBAction)endTurn:(id)sender {

[_gameDictionary setObject:@"The Object" forKey:@"The Key"];
NSLog(@"_gameDictionary: %@", _gameDictionary);

NSData *data = [NSPropertyListSerialization dataFromPropertyList:_gameDictionary format:NSPropertyListXMLFormat_v1_0 errorDescription:nil];

GKTurnBasedParticipant *nextPlayer;

if (_match.currentParticipant == [_match.participants objectAtIndex:0]) {
    nextPlayer = [[_match participants] lastObject];
} else {
    nextPlayer = [[_match participants]objectAtIndex:0];
}

NSLog(@"_match.currentParticipant: %@", _match.currentParticipant);

[self.match endTurnWithNextParticipant:nextPlayer matchData:data completionHandler:^(NSError *error) {
    if (error) {
        NSLog(@"An error occured updating turn: %@", [error localizedDescription]);
    }
    [self.navigationController popViewControllerAnimated:YES];
}];

}

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
    // Custom initialization
}
return self;
}

- (void)viewDidLoad {

[super viewDidLoad];

_gameDictionary = [[NSMutableDictionary alloc]init];

[self.match loadMatchDataWithCompletionHandler:^(NSData *matchData, NSError *error) {
    NSDictionary *myDict = [NSPropertyListSerialization propertyListFromData:_match.matchData mutabilityOption:NSPropertyListImmutable format:nil errorDescription:nil];
    [_gameDictionary addEntriesFromDictionary: myDict];

    if (error) {
        NSLog(@"loadMatchData - %@", [error localizedDescription]);
    }
}];

NSLog(@"_gameDictionary: %@", _gameDictionary);

}

输出:

"gk-cdx" = "17.173.254.218:4398";
"gk-commnat-cohort" = "17.173.254.220:16386";
"gk-commnat-main0" = "17.173.254.219:16384";
"gk-commnat-main1" = "17.173.254.219:16385";
}
2013-02-11 22:44:11.707 GC_test1[8791:14f03] _gameDictionary: {
}
2013-02-11 22:44:13.894 GC_test1[8791:14f03] _gameDictionary: {
The Object = The Key;
}
2013-02-11 22:44:13.894 GC_test1[8791:14f03] _match.currentParticipant: (null)

1 个答案:

答案 0 :(得分:0)

_match.currentParticipant评估为nil的事实令人不安。我怀疑_match从未初始化,或nil,或者它不是从游戏中心设施获得的,例如loadMatchesWithCompletionHandler:GKTurnBasedMatchmakerViewController或使用{{ 1}}。

对于新匹配,如果通过任何这些设施创建,findMatchForRequest:withCompletionHandler:将保证代表本地玩家。您不能自己实例化currentParticipant

要解决此问题,至少要进行测试,您可以在GKTurnBasedMatch的完成处理程序中分配新的_match。只有这样才能让你按下测试按钮。