我在保存某些内容方面遇到了问题,而且我的想法是正式的。 我想要做的是将整数数组保存到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
答案 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];
也许这对其他人也很有用!