整理ios开发中一些数据持久化的方法,有一些没有使用过,也是通过浏览其他文章学习,有问题可以留言或者查看原文。
用户设置 settings bundle 属性列表与归档解档
文章整理5种持久化的方法,记录一些重要的点,具体使用请查看原文
a:settings bundle -> 存储用户设置相关信息,在系统设置中可查看和设置
b:属性列表
c:对象的归档、解档
d:数据库 SQLite3 的运用
e:Core Data 的运用
1:首先使用settings bundle ,像其他应用一样在系统设置里面设置应用配置
a:创建一个应用,运行到真机上 这个时候在系统设置里面找不到应用设置信息
b:创建settings bundle,在新建文件中找到Resource -> 找到settings bundle->创建
c:这个时候运行到真机上,在系统设置中就可以看到应用配置选项了。
d:查看新建的属性列表,主要看Root.plist文件
如果你的编辑窗口与图看起来不一样,右键空白处,在弹出的菜单中选择:"Show Raw Keys/Values"。点击每一项可以查看其基本配置信息。
查看plist中各项组织结构。属性列表本质上就是字典。在存储的各个条目的类型与值,都要通过特定的键key来检索他们,这种使用方法与NSDictionaryBoolean、Data、Date、Number、String可以保存数据;另外,除了Dictionary也可以做为保存字典的节点外,还有Array节点,也是可以储存含有其他节点的有序列表。其中,其中Dictionary和Array是唯一能够包含其他节点的属性列表节点类型。
(注:虽然平时用的NSDictionary可以使用大多数对象做为键,但属性列表中的Dictionary节点中键必须为字符串类型的,但是可以选择任意节点类型做为该键的值。)
e:查看具体使用请查看原文,现在从app获取配置文件的数据(获取数据)。
访问用户的设置需要调用NSUserDefaults类,NSUserDefaults为单例类,需要调用类方法standardUserDefaults来获取指向标准用户默认设置的指针:
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
defaults可以像NSDictionary类一样进方法的调用,例如“objectForKey:”,会返回一个Object-C对象,如NSString、NSDate、NSNumber。若需要获取整型、浮点型等方式,可以用“intForKey:”、“floatForKey”、“boolForKey”等其他方法。
f:自动创建的配置文件包含一个name输入框,一个enabled设置,一个slider;我们可以在配置文件中查看其Identifier,通过NSUserDefaults获取其具体值.
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSString *name = [defaults valueForKey:@"name_preference"];
g:通过app设置配置,现在无论在系统还是app修改配置,都可以同步内容,其他需要注意的地方请查看原文(获取数据)
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setFloat:self.WarpSlider.value forKey:SliderValue];
[defaults synchronize];
2:属性列表 这里是原文
a:获取属性列表的路径
//获取属性列表路径中数据文件的完整路径 dataFilepath//需要加载和保存数据的代码都可以调用该方法.
-(NSString *)dataFilepath{
NSArray *paths =NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *pathDirectory = [paths objectAtIndex:0];
return [pathDirectory stringByAppendingPathComponent:@"data.txt"];
}
b:写入列表
NSString *pathFile = [self dataFilepath];
NSArray *array = [self.lineFields valueForKey:@"text"];
//把字符串数组写入文件。
[array writeToFile:pathFile atomically:YES];
c:获取列表内容
NSString *filePath = [self dataFilepath];
//判断是否存在属性列表文件
if([[NSFileManager defaultManager] fileExistsAtPath:filePath]) {
//获取数据
NSArray *ar= [[NSArray alloc]initWithContentsOfFile:filePath];
}
3:对模型对象进行归档、解档 这里是原文
就像我们前面属性列表的介绍,归档(archiving)也是指另一种形式的序列化。但强大的一点是,它是任何对象都可以实现的更常规的储存数据类型;在进行归档、解档的开发中,我们需要一起实现的,还有NSCoding和NSCopying协议,需要说明的是,标量(如int或float)以及大多数Foundation和Cocoa Touch类都遵循NSCoding协议(有例外,如UIImage不遵循),因此大多数类,还是比较容易实现归档操作的;