保存游戏时用户默认设置的问题...(int数组)
Posted
技术标签:
【中文标题】保存游戏时用户默认设置的问题...(int数组)【英文标题】:problem with user defaults when saving a game... (int array) 【发布时间】:2010-07-27 23:03:13 【问题描述】:我在保存某些东西时遇到了问题,并且我正式没有想法。 我想要做的是将一个整数数组保存到 userDefaults 中,然后在重新启动应用程序时加载此数组并从最后一点重新启动游戏。
我所做的是,每次转动后,我的 AI 逻辑都会将实际游戏状态保存到一个数组中 -> 到目前为止一切正常。数组已保存,当我“重新”读取保存的数组时,它似乎没问题......实际上它已经保存了正确的数组!
现在我重新开始游戏。我检查了一个布尔变量,如果游戏被中断,我也保存了该变量。也很好用。
现在是技巧部分。我从 userDefaults 和 WOHOOO 中读取了数组!我得到了一个稍微不同的数组,然后我保存了!我真的不知道为什么:(
好吧:现在是代码:
这是我为拯救董事会所做的:
NSData *data = [NSData dataWithBytes:&boardToSave length:sizeof(boardToSave)];
[userDefaults setObject:data forKey:@"MB_boardSave"];
这里是我在初始化电路板时如何取回数据:
int loadBoard[8][8] = 0;
NSData *data = [userDefaults objectForKey:@"MB_boardSave"];
memcpy(&loadBoard, data.bytes, data.length);
再次...进去的是正确的,出来的不是:(
任何建议将不胜感激! 如果您认为有更好的选择,我也愿意接受其他储蓄选择!
谢谢
【问题讨论】:
除了任何解决方案,您能否分享一下正在的进出? 例如:我保存的前8个数组条目:12、2、12、0、12、2、12、2----和加载的前8个:12、2、 12, 21, 12, 2, 12, 2 ---- 唯一的区别是 21 而不是 0... 但这在棋盘上发生了很大变化 ;) 我更新了我的答案,因为我错过了非常明显的错误... 【参考方案1】:编辑错误是您将memcpy
改为&loadBoard
。它应该是普通的loadBoard
,因为那是一个指针。 boardToSave
也是如此。
有趣的是,它会在你做的时候做一些工作(而不是崩溃)。
【讨论】:
我没有,但无论如何它确实有效:( sizeof() 和 .length 返回相同的值(见下文) 哦,boardToSave 确实定义为 int boardToSave[8][8] :) 无论如何它都不会崩溃,但即使是这样写它也会产生同样的结果......正确的进入错误的出现:( 所以你删除了两个&
并且什么都没有改变。现在那真的很奇怪。
你的答案当然是正确的,但请看我的,笑一笑:)【参考方案2】:
非常抱歉,但它的代码盲点让我印象深刻:)
我想要这个
if(loadBoard[j][i] == 1 || loadBoard[j][i] == 11 || loadBoard[j][i] == 12)
[...];
我有这个
if(loadBoard[j][i] == 1 || boardSetup[j][i] == 11 || boardSetup[j][i] == 12)
[...];
难怪它不起作用:) 但尽管如此,在我得到正确的结果之后,在保存和加载数组时也存在一些错误,我能够找到上面的“眼睛”错误 :)
我现在保存数组的方法是不使用 int[8][8] 数组,而是直接保存到 userDefaults 中的 NSMutableArray。 (没有更多的内存副本等等......) 这是我所做的以及(最终)对我有用的
保存:
NSMutableArray* array = [[NSMutableArray alloc] init];
// ... fill Array like so: [array addObject:[NSNumber numberWithInt:11]]; ...
[userDefaults setObject:array forKey:@"MB_boardSave"];
[userDefaults synchronize];
加载:
NSArray* array = [userDefaults objectForKey:@"MB_boardSave"];
int example = [[array objectAtIndex:0] intValue];
也许这对其他人也有用!
【讨论】:
顺便说一句,你release
数组吗?我建议在init
之后使用autorelease
。
我确实发布了它,但改为自动发布。谢谢提示!以上是关于保存游戏时用户默认设置的问题...(int数组)的主要内容,如果未能解决你的问题,请参考以下文章