2010-07-27 76 views
1

我在保存内容时遇到问题,并且正式出于想法。 我想要做的是将一个整数数组保存到userDefaults中,然后在重新启动应用程序时加载该数组并从最后一点重新开始游戏。保存游戏时用户默认值的问题...(int array)

我所做的是在每次转动之后,我的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); 

...怎么回事的是正确的,什么出来是不是:(

任何建议将非常感谢! 如果您认为有更好的选择,我也可以选择其他保存选项!

THX

+0

除了任何解决方案,请你分享什么*进出?例如: – mvds 2010-07-27 23:13:55

+0

例如:我保存的前8个数组条目:12,2,12,0,12,2,12,2和----加载的前8个数组:12,2,12,21,12,2 ,12,2 ----唯一的区别是21而不是0 ...但是在板上有很大的变化;) – zwadl 2010-07-27 23:40:29

+0

我更新了我的答案,因为我错过了*非常明显的* bug ... – mvds 2010-07-27 23:49:45

回答

1

编辑的错误是,你要memcpy&loadBoard。它应该是普通的loadBoard,因为这是一个指针。 boardToSave也一样。

有趣的是,它做的工作(而不是崩溃),当你这样做。

+0

i无论如何它does notst工作:(sizeof()和.length做返回相同的值(见下文) – zwadl 2010-07-27 23:33:32

+0

哦和boardToSave确实定义int boardToSave [8] [8] – zwadl 2010-07-27 23:41:47

+0

:)它不会崩溃,但即使这样写出来的东西会产生相同的东西......正确的错误的东西出来: – zwadl 2010-07-27 23:54:08

0

IM非常抱歉,但它的代码失明让我吃惊:)

在那里我想这个

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){ 
[...]; 
} 

难怪它没有工作:) 但所有它的价值在保存和加载阵列时出现了一些错误,之后我得到了正确的结果,我能够找到上面的“眼睛”bug :)

我现在要保存数组的目的是不使用int [8] [8]数组,而是直接保存到userDefaults中的NSMutableArray。 (没有更多的memcopy等...) 这里是我做过什么,什么(最终)对我的作品

节省:

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

也许这就是有用的别人的!

+0

干得好,这是做事情的不太冒险的方式! – mvds 2010-07-28 12:15:50

+0

btw你释放数组吗?我在'init'后面提出一个'autorelease'。 – mvds 2010-07-28 12:16:32

+0

我确实释放它,但更改为autorelease。 thx的提示! – zwadl 2010-07-28 12:20:20