2014-01-11 33 views
0

我最近有我的應用程序運行iOS6和iOS7。但是,我注意到,在iOS6模擬器中保存在NSUserDefaults中的iOS7數據加載模擬器不存在時。每個Xcode iOS模擬器操作系統版本的獨特NSUserDefaults?

比如,我保存列表這個代碼(在模擬器運行iOS6的):

NSData *data = [NSKeyedArchiver archivedDataWithRootObject:myList]; 
[[NSUserDefaults standardUserDefaults] setObject:data forKey:@"List_v1"]; 

我可以輕鬆地與iOS6的重新啓動模擬器並取回我的名單使用此代碼沒有問題:

NSData *savedList = [[NSUserDefaults standardUserDefaults] objectForKey:@"List_v1"]; 
myList = [NSKeyedUnarchiver unarchiveObjectWithData:savedList]; 

但是,如果我重新啓動模擬器與iOS7並運行相同的代碼來加載列表它不再可用。模擬器是否保持每個操作系統版本的數據不同?

+0

這似乎是這樣,而且會有道理。例如,數據可能以不同的格式存儲在操作系統版本之間。 – SevenBits

回答

4

是,每個IOS版本都有其自己的文件夾中: /Users/YOUR_USER/Library/Application Support/iPhone Simulator/IOS_VERSION

1

每個IOS版本(不只是iOS 6的或iOS 7,但也iOS的6.1分開的iOS 6.0存儲)在其自己的數據夾。這些數據不僅僅是NSUserDefaults,還包括應用程序從/向/從磁盤寫入/寫入的任何其他數據。它們被視爲獨立安裝,彼此獨立。

0

編輯:我錯了我的理解。看起來用戶默認只按操作系統版本分隔設備。所有運行相同操作系統版本的仿真設備都將讀取/寫入相同的用戶默認設置。

不同的操作系統版本確實有不同的默認文件。

這是值得注意的事情。如果你將設備相關的設置保存爲默認值,那麼你可能會在模擬中遇到非常混亂的測試。

這是Maddy指出的。

+1

這是不對的。模擬器中給定iOS版本的所有模擬設備共享相同的數據。運行用於iOS 7.0的非視網膜iPhone模擬器,然後運行用於iOS 7.0的視網膜iPad模擬器,您將看到相同的應用程序,相同的NSUserDefaults等。模擬器僅在每個版本的iOS中具有單獨的文件夾,而不是每個設備。 – rmaddy

+0

真的嗎?那麼我需要測試一下。 –

+0

@maddy,你是對的。謝謝你糾正我。我假設,沒有測試。我的錯。 –