0

在我的应用程序中,我有一个名为 matchDataDictionary 的字典,我设置了以下内容:

[[GCTurnBasedMatchHelper sharedInstance].matchDataDictionary setObject:deck forKey:@"deck"];

其中甲板是甲板的一个实例:https ://gist.github.com/naderhen/4711899

然后,我尝试使用以下内容测试归档/取消归档:

存档(这似乎有效):

NSMutableData *newData = [[NSMutableData alloc] init];
NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:newData];
[archiver encodeObject:[GCTurnBasedMatchHelper sharedInstance].matchDataDictionary forKey:@"root"];
[archiver finishEncoding];

NSLog(@"Archived Data: %@", newData);

取消归档(不起作用):

NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:newData];
NSMutableDictionary *matchDataDictionary = [unarchiver decodeObjectForKey:@"root"];
[unarchiver finishDecoding];

NSLog(@"Unarchived Data: %@", matchDataDictionary);

任何关于如何有效归档和随后取消归档这些数据的指导将不胜感激。如果有帮助,这适用于使用 GameKit 框架的回合制游戏,因此我正在尝试准备用户操作以通过当前比赛的 matchData 发送。

还!任何关于我如何修复 Deck 编码以包含其“Tiles”数组的建议将不胜感激。

非常感谢!

纳德

4

1 回答 1

0

使用 NSCoding 协议。每个实体对自己进行编码,然后对自己进行解码。有点神奇,它是多么容易,随着应用程序的增长,人们可以将功能添加到对象图的新部分,而无需了解存档器/取消存档器或其格式。

NS编码协议

我在 GitHub 上有一个开源项目,可以轻松地对 JSON 进行 NSCoding 或从 JSON 进行 NSCoding:JSONCoding

这是我开发之前的一些代码(来自单元测试):

NSData *data = [NSKeyedArchiver archivedDataWithRootObject:firstDish];
RestaurantDish *retrievedDish = [NSKeyedUnarchiver unarchiveObjectWithData:data];
assertThat(retrievedDish.name, is(dishName));   

实例 firstDish 只是表示一盘食物的实体 Dish。

于 2013-02-05T03:31:39.710 回答