保存游戏时用户默认值的问题...(int数组)

时间:2010-07-27 23:03:13

标签: iphone arrays save nsuserdefaults

我在保存某些内容方面遇到了问题,而且我的想法是正式的。 我想要做的是将整数数组保存到userDefaults中,然后重新启动加载此数组的应用程序并从最后一点重新开始游戏。

我所做的是每次转弯后我的AI逻辑将实际游戏状态保存到阵列中 - >到目前为止这么好,这很好。数组被保存,当我“读”保存的数组时,似乎没问题......实际上它已经保存了正确的数组!

现在我重启游戏。我检查一个bool变量,如果游戏被有序中断,我也会保存。工作得很好。

现在是诀窍的一部分。我从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);

再次......什么进入是正确的,什么是出来不是:(

任何建议都将非常感谢! 如果你认为有更好的选择,我也会选择其他储蓄选择!

THX

2 个答案:

答案 0 :(得分:1)

编辑错误是您memcpy&loadBoard。它应该是普通的loadBoard,因为那是一个指针。同样适用于boardToSave

有趣的是,它会像你一样工作(而不是崩溃)。

答案 1 :(得分:0)

非常抱歉,但它的代码失明让我感到震惊:)

我想要这个

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];

也许这对其他人也很有用!

相关问题