gpt4 book ai didi

iphone - 使用 NSData 更新 GKTurnBasedMatch 中的回合

转载 作者:行者123 更新时间:2023-11-28 22:38:46 25 4
gpt4 key购买 nike

我正在尝试创建一款 2 人回合制比赛游戏。玩家目前可以轮流,但实际上并没有将数据填充到 NSData 中。我发现了这种关于如何存档和序列化的方法,但我觉得我一般都做错了。这是在玩家 1 完成他们的回合后执行的代码。目前,我真的只需要保存分数(我这样说是因为我在数据字典中保存了 player1id,而我真的不需要)。

        //changes whose turn it is and sends data.
NSLog(@"player 1 just took their turn");
NSUInteger myscore = [AppDelegate getGameState].gameDetail.player1Score;
NSString *errorStr;
NSDictionary *myMatchDataDict = @{@"Player1id" : [GKLocalPlayer localPlayer].playerID,
@"Player1score" : myscore,
@"Player2id" : nil,
@"Player2score" : nil };
NSData *data = [NSPropertyListSerialization dataFromPropertyList:myMatchDataDict format:NSPropertyListXMLFormat_v1_0 errorDescription:&errorStr];
GKTurnBasedParticipant *nextParticipant;
nextParticipant = [currentMatch.participants objectAtIndex:1];
NSLog(@"game data: %@,", data);
[currentMatch endTurnWithNextParticipant:nextParticipant matchData:data completionHandler:^(NSError *error) {
if (error) {
NSLog(@"%@", error);
}
}];
NSLog(@"Turn Sent");

轮到发了,myscore里面确实有分数,但是NSData *data里面没有数据! (注意:目前我收到此错误:)

“‘NSUInteger’(又名‘未登录’)类型的集合元素不是 Objective-C 对象”

拆开我的代码,告诉我哪里做错了!

编辑:在输出中添加:

    NSLog(@"player 1 just took their turn");
NSUInteger myscore = [AppDelegate getGameState].gameDetail.player1Score;
NSLog(@"whats in this: %lu", (unsigned long)[AppDelegate getGameState].gameDetail.player1Score);
NSLog(@"myscore is: %lu", (unsigned long)myscore);
NSString *errorStr;
NSDictionary *myMatchDataDict = @{@"Player1id" : [GKLocalPlayer localPlayer].playerID,
@"Player1score" : @(myscore)};
NSData *data = [NSPropertyListSerialization dataFromPropertyList:myMatchDataDict format:NSPropertyListXMLFormat_v1_0 errorDescription:&errorStr];
GKTurnBasedParticipant *nextParticipant;
nextParticipant = [currentMatch.participants objectAtIndex:1];
NSLog(@"myMatchDataDictionary player 1 score: %ld,", (long)[myMatchDataDict[@"Player1Score"] integerValue]);

和输出:

2013-03-01 15:49:10.174 玩家 1 刚轮到他们

2013-03-01 15:49:10.174 这是什么:3042

2013-03-01 15:49:10.175 我的分数是:3042

2013-03-01 15:49:10.175 myMatchDataDictionary 玩家 1 得分:0

2013-03-01 15:49:10.175 发送转

我开始认为这是 [AppDelegate getGameState].gameDetail.player1Score 的问题

最佳答案

改变这个

@"Player1score" : myscore,

进入

@"Player1score" : @(myscore),

你只能将对象添加到字典中,而 NSUInteger 不是对象,当你传递 @(myScore) 时,你将它变成一个 NSNumber 对象 - 所以当读回它时你应该这样做:

[myMatchDataDictionary[@"Player1Score"] integerValue];

关于iphone - 使用 NSData 更新 GKTurnBasedMatch 中的回合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15166303/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com