专业 靠谱 的软件外包伙伴

您的位置:首页 > 新闻动态 > iOS 数据存储软件开发—— 沙盒、Settings Bundle

iOS 数据存储软件开发—— 沙盒、Settings Bundle

2016-08-26 15:58:21

iOS存储

iOS 数据存储的几种方式:

 

NSUserDefaults                 适用于保存程序参数,设置,选项相关的少量数据。

XML属性列表(plist)归档     少量数据

NSKeyedArchiver归档(NSCoding)

SQLite3                            大量数据

iOS程序只能在系统为该应用分配的文件区域下读/写文件,这个文件区域就被称为该应用程序的沙盒

沙盒下的结构:

 

  • Documents:除了NSUserDefaults的首选项设置外,应用程序的数据、文件大都保存在该目录下。
  • Library:基于NSUserDefaults的首选项参数保存在Library/Preferences目录下。
  • tmp: 存储临时文件,当应用程序不再需要某个临时文件时,应负责删除。

 

 

沙盒各目录获取方式

1 获取Documents目录

两种方式:

 

  • 利用NSSearchPathForDirectoriesInDomains()函数
[objc] view plain copy
 
 print?在CODE上查看代码片派生到我的代码片
  1. //NSDocumentDirectory表示查找Documents文件夹,NSUserDomainMask参数代表仅搜索应用程序沙盒。  
  2. NSArray *pathAry = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);  
  3. //沙盒下只有一个Documets文件夹,所以获取第一个元素。  
  4. NSString *documentsPath = pathAry[0];  
  • 利用根目录拼接字符串
[objc] view plain copy
 
 print?在CODE上查看代码片派生到我的代码片
  1. //沙盒根目录  
  2. NSString *home = NSHomeDirectory();  
  3. NSString *documents = [home stringByAppendingPathComponent:@"Documents"];  
2 获取tmp目录
[objc] view plain copy
 
 print?在CODE上查看代码片派生到我的代码片
  1. NSString *tmpPath = NSTemporaryDirectory();  

3 获取Library目录
Library目录
[objc] view plain copy
 
 print?在CODE上查看代码片派生到我的代码片
  1. NSArray *pathAry = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES);  
  2. NSString *libraryPath = pathAry[0];  
Library/Caches目录
与Documents方法相似
[objc] view plain copy
 
 print?在CODE上查看代码片派生到我的代码片
  1. NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);  
  2. NSString *cachesPath = paths[0];  

Library/Preferences目录
[objc] view plain copy
 
 print?在CODE上查看代码片派生到我的代码片
  1. NSArray *pathAry = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES);  
  2. //通过Library目录拼接字符串  
  3. NSString *preferencesPath = [pathAry[0] stringByAppendingPathComponent:@"Preferences"];  

Settings Bundle 默认设置

在说这几种数据存储之前我们先说一下Settings Bundle,程序默认设置。比如:是否适用震动,是否开启音效等。
通过在工程中新建Settings.bundle文件,你会看见工程中多了一个文件Settings.bundle,如下图所示:
 
不做任何修改,运行程序,点击系统设置应用,点击自己的应用会发现多了四项内容:
这些内容如果不修改,在程序中通过NSUserDefaults是获取不到的。需要启动程序的时候进行设置。
AppDelegate.m文件中设置
[objc] view plain copy
 
 print?在CODE上查看代码片派生到我的代码片
  1. - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {  
  2.     // Override point for customization after application launch.  
  3.     //设置之前  
  4.     NSLog(@"enabled before is %@",[[NSUserDefaults standardUserDefaults]  
  5.                                    stringForKey:@"enabled_preference"]);  
  6.     NSLog(@"name_preference is %@",[[NSUserDefaults standardUserDefaults] stringForKey:@"name_preference"]);  
  7.     NSLog(@"slider preference is %@",[[NSUserDefaults standardUserDefaults] stringForKey:@"slider_preference"]);  
  8.     // 加载默认配置  
  9.     [self registerDefaultsFromSettingsBundle];  
  10.     //设置之后  
  11.     NSLog(@"enabled after is %@",[[NSUserDefaults standardUserDefaults] stringForKey:@"enabled_preference"]);  
  12.     NSLog(@"name_preference is %@",[[NSUserDefaults standardUserDefaults] stringForKey:返回首页] [打印] [返回上页]   下一篇