2011-07-16 58 views
0

我試圖在遊戲中保存信息,但我卡住了。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.

回答

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

0

NSUserDefaults是不是真的爲這個偉大的解決方案。你考慮過CoreData還是文件系統?

保存圖像本身似乎不必要和浪費。你所要做的就是記錄遊戲的狀態 - 即哪個磚位於哪個位置。您應該能夠輕鬆地從該數據重新創建視圖。

+0

我先用CoreData嘗試過,但從另一個論壇獲得的信息表明,NSUserDefaults是比CoreData更好的解決方案。 – iphonedevonthemake

+0

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