所以现在我正在努力在回合制游戏中发送比赛数据,我正在使用这篇文章作为参考。 Good practices for Game Center matchData
我创建了一个新类,它实现了NSCoding。它目前只为NSString保存一个变量。这是我发送匹配数据时的代码。
self.game.status = @"Test";
NSData *updatedMatchData = [NSKeyedArchiver archivedDataWithRootObject:self.game];
[self.currentMatch endTurnWithNextParticipants:[NSArray arrayWithObject:nextPerson]
turnTimeout:1000
matchData:updatedMatchData
completionHandler:^(NSError *error) {
if (error) {
NSLog(@"Error: %@", error);
}
}];
NSLog(@"Successfully ended turn");
}
当我尝试检索匹配数据时,我尝试了这个。
[match loadMatchDataWithCompletionHandler:^(NSData *matchData, NSError *error) {
if (matchData)
{
RaceGame *updatedGame = [NSKeyedUnarchiver unarchiveObjectWithData:matchData];
NSLog(@"Match Data: %@", updatedGame.status); //prints null
callback(matchData);
}
}];
但是,状态为空。我已经检查过那场比赛也不是空的。我也打印出了比赛,它说matchData.length = 135,但是我一直在改变它,它仍然是135,所以我不确定这是否有用。
关于地位为何没有改变的任何想法?
- 编辑 -
的.m
@implementation RaceGame
@synthesize status;
#pragma mark - NSCoding protocol
- (void)encodeWithCoder:(NSCoder *)aCoder
{
[aCoder encodeObject:status forKey:@"status"];
}
- (id)initWithCoder:(NSCoder *)aDecoder
{
if (self = [super init]) {
self.status = [aDecoder decodeObjectForKey:@"status"];
}
return self;
}
@end
·H
@interface RaceGame : NSObject <NSCoding> {
NSString *status;
}
/* Match Data */
@property (nonatomic, copy) NSString *status;
@end
答案 0 :(得分:0)
没关系,我真是个愚蠢的错误。我在两台设备上测试它,我只在其中一台设备上运行更新版本。