一、概述
iOS数据存储有:Plist、CoreData、SQLite、NSUserDefault、归档
二、Plist存储
支持NSDictionary、NSArray、NSString、NSData、NSNumber对象类型,使用writeToFile:atomically:方法直接将对象写到属性列表文件中,不支持自定义对象。写入地址为Document文件下。
//代码写plist文件
NSArray *path = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *docPath = [path objectAtIndex:0];
NSString *plistFile = [docPath stringByAppendingPathComponent:@"student.plist"];
//获取路径plist文件
NSString *path = [[NSBundle mainBundle] pathForResource:@"student" ofType:@"plist"];
//读取
NSArray *result = [NSArray arrayWithContentsOfFile:path];
NSDictionary * result = [NSDictionary dictionaryWithContentsOfFile:path];
三、NSUserDefault偏好设置
保存在Library-->Preferences下。用户的设置信息,iTunes同步的时候会同步此文件夹
//写入文件
NSUserDefaults*defaults=[NSUserDefaults standardUserDefaults];
[defaults setObject:@"yixiang"forKey:@"name"];
[defaults setInteger:27forKey:@"age"];
//立即同步,保存数据,如果不手动调用,系统会自动保存但时间不确定
[defaults synchronize];
//读取文件
NSUserDefaults*defaults=[NSUserDefaults standardUserDefaults];
NSString*name=[defaults objectForKey:@"name"];
NSInteger age=[defaults integerForKey:@"age"];
删除数据的方法:
- (void)removeObjectForKey:(NSString *)defaultName;
四、归档
归档可以实现把自定义的对象存放在文件中。需要保存的对象必须遵守NSCoding协议,并且实现该协议中- (void)encodeWithCoder:(NSCoder )aCoder和 - (id)initWithCoder:(NSCoder )aDecoder方法。
AAAA.h
@interface AAAA: NSObject
@property(nonatomic,copy)NSString*name;
@property(nonatomic,assign)intage;
@end
AAAA.m
#import "AAAA.h"
@implementation AAAA
-(void)encodeWithCoder:(NSCoder*)aCoder{
[aCoder encodeObject:self.name forKey:@"name"];
[aCoder encodeInteger:self.age forKey:@"age"];
}
-(id)initWithCoder:(NSCoder*)aDecoder{
if(self=[super init]){
self.name=[aDecoder decodeObjectForKey:@"name"];
self.age=[aDecoder decodeIntegerForKey:@"age"];
}returnself;
}
@end
在ViewController用到的地方进行读取
//创建对象,赋值数据
AAAA *p=[[AAAA alloc]init];
p.name=@"yixiang";
p.age=27;
//创建文件路径
//写入文件
[NSKeyedArchiver archiveRootObject:p toFile:path];
//读取对象
AAAA *p=[NSKeyedUnarchiver unarchiveObjectWithFile:path];
五、CoreData
CoreData采用ORM(关系映射)的存储方式,不需要使用SQL语句,可以将OC对象存到数据库,也可以将数据库数据转为OC对象。
(1)NSManagedObjectContext
托管对象上下文,数据库的大多数操作是在这个类操作,增删改查操作直接对这个类使用来获得或者修改需要的 OC 对象
(2)NSManagedObjectModel
托管对象模型,其中一个托管对象模型关联到一个模型文件,里面存储着数据库的数据结构。数据模型,负责读取解析 .momod 文件
(3)NSPersistentCoordinator
持久化存储协调器,主要负责协调上下文存储的关系。数据库连接类,通过解析结果去实现数据库和 OC 对象之间的相互转换
(4)NSManagedObject
托管对象类,其中CoreData里面的托管对象都会继承此类
六、SQLite
是轻量型关系型数据库,占用资源非常少,可以保存所有类型的数据
1.创建表的命令
create table 表名 (字段名1 字段类型1,字段名2 字段类型2,以此类推....);
create table if not exists 表名(字段名1 字段类型1, 字段名2 字段类型2,以此类推 …) ; // if not exists 没有此表就创建
create table if not exists stu( name TEXT, age INTEGER)
2.插入命令
insert into 表名 (字段1, 字段2, 以此类推…) values (字段1的值, 字段2的值,以此类推 …) ;
insert into 表名 (字段1, 字段2, 以此类推…) values (字段1的值, 字段2的值,以此类推 …)
insert into stu (name, age) values ( 'haha', 12)
insert into stu (name, age) values ( 'haha', 12)
3.更新命令
update 表名 set 字段1 = 字段1的新值, 字段2 = 字段2的新值,以此类推 … where 条件
update stu set name = 'sixsix', age = 15 where age = 12
4.删除命令
delete from 表名
delete from stu
delete from 表名 where 条件
delete from stu where age > 12;
5.查询数据
SELECT 字段1,字段2 FROM 表明;
SELECT name,age FROM stu;
SELECT 字段1,字段2 FROM 表明 where 条件;
SELECT * FROM stu where age > 12;
SELECT name,age FROM stu where age > 12;
6.常用函数
打开创建数据库
sqlite3_open(constchar*filename, sqlite3 **ppDb );
回调函数执行SQL语句
sqlite3_exec(sqlite3* pDB,constchar*sql, sqlite_callback callback,void*para,char** errMsg);
7.使用方式
定义一个单例,提供类方法,封装对数据库的使用。供全局使用。
在工程-General->Framework、Library中添加 libsqlite3.tbd
导入头文件 #import