2014-01-11 35 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,你是对的。谢谢你纠正我。我假设,没有测试。我的错。 –