NSUserDefault问题。保存/检索数据,包括UIImageView网格[] []

问题描述:

我试图在游戏中保存信息,但我卡住了。NSUserDefault问题。保存/检索数据,包括UIImageView网格[] []

在尝试使用NSUserDefault之前,我尝试了一种不同的方法。

我试图挽救是

* PlayerScore // NSInteger的

*高分// NSInteger的

*级别// NSInteger的

*时间// INT

* SFX和背景音乐上的按钮设置

*背景音乐位置,所以它会恢复它停止的地方

*网格是gamefield和它的砖(网格是6x6,也是一个UIImageView * grid [] []类型,砖它是35)

-(void)saveGameState { 

NSLog(@"saveGameState"); 
NSLog(@"totalrubies %d", totalrubies); 
NSLog(@"playerscore %d", playerscore); 
NSLog(@"highscore %d", highscore); 
NSLog(@"level %d", level); 
NSLog(@"totalseconds %d", totalSeconds); 

[[NSUserDefaults standardUserDefaults] setInteger:totalrubies forKey:kRubiesKey]; 
[[NSUserDefaults standardUserDefaults] setInteger:playerscore forKey:kPScoreKey]; 
[[NSUserDefaults standardUserDefaults] setInteger:highscore forKey:kHScoreKey]; 
[[NSUserDefaults standardUserDefaults] setInteger:level forKey:kLevelKey]; 
[[NSUserDefaults standardUserDefaults] setInteger:totalSeconds forKey:kTimeKey]; 
[[NSUserDefaults standardUserDefaults] synchronize]; 


for (int y = 0; y < BRICKHEIGHT; y++) 
{ 
    for (int x = 0; x < BRICKWIDTH; x++) 
    { 

     [[NSUserDefaults standardUserDefaults] setObject:grid[x][y] forKey:kGridKey]; 
     NSLog(@"grid[BRICKWIDTH][BRICKHEIGHT] %d", grid[x][y].tag); 
    } 
} 

}

我想这样也

NSData *ImageData = UIImagePNGRepresentation (grid[x][y]); [NSUserDefaults standardUserDefaults] setObject:ImageData forKey:kGridKey];

但后来我得到了一个警告:不兼容的Objective-C型“结构的UIImageView *”,预期“结构的UIImage *”通过从不同的Objective-C型“UIImagePNGRepresentation”的参数1时

我成功,我认为,救以外的所有最后3 *在列表中。我需要帮助那些特别与网格部分,这是prio 1.

你应该给UIImagePNGRepresentation()UIImageUIImageView,因此这个错误消息。

尝试:

UIImageView *imgView = grid[x][y]; 
NSData *ImageData = UIImagePNGRepresentation(imgView.image); 
[NSUserDefaults standardUserDefaults] setObject:ImageData forKey:kGridKey]; 
+0

好吗?我以为我做了,当我尝试这部分... NSData * ImageData = UIImagePNGRepresentation(grid [x] [y]); [NSUserDefaults standardUserDefaults] setObject:ImageData forKey:kGridKey]; – iphonedevonthemake

+0

好的......我试试看...... – iphonedevonthemake

+0

不错......警告消失了。我如何加载它?像这个网格[x] [y] = [[NSUserDefaults standardUserDefaults] ObjectforKey:kGridKey]; ? – iphonedevonthemake

NSUserDefaults是不是真的为这个伟大的解决方案。你考虑过CoreData还是文件系统?

保存图像本身似乎不必要和浪费。你所要做的就是记录游戏的状态 - 即哪个砖位于哪个位置。您应该能够轻松地从该数据重新创建视图。

+0

我先用CoreData尝试过,但从另一个论坛获得的信息表明,NSUserDefaults是比CoreData更好的解决方案。 – iphonedevonthemake

+0

@Jim +1,确实如此 – 2011-07-16 12:46:30