2010-02-03 59 views
4

我有一個24字符串的NSMutableArray。退出時保存應用程序數據狀態

如果用戶接到電話或退出應用程序,我需要保存此數據。

我一直在尋找很多例子,但由於某種原因似乎無法確定保存數據的最佳方式。

24個字符串對應24個按鈕及其狀態。點擊一個按鈕後,它會顯示該按鈕標籤的對應數組信息(0 - 23)。我需要保留的是,如果點擊了10個按鈕並顯示其數據,如何/什麼是保留這些數據的最佳方式,以便在應用程序啓動時可以重新加載它們?

我想我需要存儲:

按鈕標籤, 按鈕相應的數組值,
按鈕狀態(它是否點擊和值顯示與否)

我將存儲此關於應用程序退出的數據,然後當應用程序再次啓動時,我會確定這個存儲的數據是否存在,如果是這樣,填充數組並檢查按鈕狀態以確定它是否已經顯示,如果是,則相應地設置它。然後當這個文件被加載時,我會刪除存儲的數據(.DAT文件,如果以這種方式存儲的話)。這樣,如果用戶優雅地退出,在下次啓動時,它將開始新的遊戲。

我已經看過幾個例子,他們將數據存儲到.DAT文件中,但是在執行此操作時遇到了問題......並且懷疑這是否是最好的方法。

任何幫助或想法,這是非常感謝。

地理...

回答

2

您可以將數據保存到文檔目錄中的plist。如果數據存在,請將其加載,如果不存在,則會提示執行全面運行。

加載數據:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documents = [paths objectAtIndex:0]; 
NSString *filePath = [documents stringByAppendingPathComponent:@"buttonState.plist"]; 
NSMutableDictionary *buttonState = [[NSMutableDictionary alloc] initWithContentsOfFile:filePath]; 

要保存的數據:

[buttonState writeToFile:filePath atomically: YES]; 
5

你應該能夠將其存儲在NSUserDefaults

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
[defaults setObject:buttonState forKey:@"buttonState"]; 
[defaults synchronize]; 

// Then to get the state back 
NSMutableArray* buttonState = [[[NSUserDefaults standardUserDefaults] arrayForKey:@"buttonState"] mutableCopy]; 
+1

工作,我不建議使用NSUserDefaults的存儲遊戲狀態。此外,在設置值之後,您需要在默認值上調用「同步」,否則它們可能不會保存到磁盤。 –

+0

爲此使用'NSUserDefaults',St3fan有什麼問題?這當然不是一種不尋常的方法。 –

+1

'NSUserDefaults'只是一個很好的界面,可以將plist文件寫入磁盤。所以使用它或使用手動文件讀取和寫入幾乎沒有什麼區別。這種方法很好。 –

1

我用儲存數據NSKeyedArchiver/NSKeyedUnarchiver,因爲你的NSMutableArray已經支持NSCoding協議,你可以只使用

yourArray = [NSKeyedUnarchiver unarchiveObjectWithFile:file]; 

[NSKeyedArchiver archiveRootObject:yourArray toFile:file]; 

編輯:

我想NSArray自己的方法也

[NSArray writeToFile:] 
[NSArray initWithContentsOfFile:] 
相關問題