iOS 应用数据存储

来源:互联网 发布:孙悟空淘宝店 编辑:程序博客网 时间:2024/05/17 02:59

iOS 开发中,经常会有将数据存储到本地的需求。比如一些数据的缓存,或者记录下用户的账号密码,记录下下次是否自动登录等,这些都需要将数据记录到本地。iOS中,数据存储到本地的常见方式有三种:

一: 使用plist 存储到本地;

二:Preference(偏好设置)

三:归档解档。

举例介绍一下三种方式。

在介绍数据存储之前,需要先了解下iOS 中app的沙盒机制

方式一:

使用plist将数据存储到本地,实际上就是将数据写到一个文件中,文件中的数据是以xml格式保存。使用plist存储数据非常方便,代码如下:

// 获得沙盒路径    NSString *home = NSHomeDirectory();    NSLog(@"home = %@",home);    NSString *docPath = [home stringByAppendingPathComponent:@"Documents"];    // 文件路径    NSString *filePath = [docPath stringByAppendingPathComponent:@"data.plist"];        NSArray *data = @[@"test",@10,@"lalala"];    [data writeToFile:filePath atomically:YES];

从plist文件中读取所保存的数据代码如下:

// 获得沙盒路径    NSString *home = NSHomeDirectory();    NSString *docPath = [home stringByAppendingPathComponent:@"Documents"];    // 文件路径    NSString *filePath = [docPath stringByAppendingPathComponent:@"data.plist"];    NSArray *data = [NSArray arrayWithContentsOfFile:filePath];    NSLog(@"%@",data);

需要有一点注意的是:使用plist保存数据,仅适用于Foundation框架中自带的一些类,比如 NSString\NSArray\NSDictionary等。保存数据时,通过调用对象的writeToFile 方法写文件,读取数据时,通过调用对象的 ...WithContentsOfFile 方法读取文件内容。

方式二:

偏好设置的本质实际上仍然是以plist的方式存储数据。

偏好设置保存数据代码:

// 利用NSUserDefaults,就能直接访问软件的偏好设置(Library/Preferences)    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];        [defaults setObject:@"test" forKey:@"account"];    [defaults setObject:@"121" forKey:@"password"];    [defaults setInteger:10 forKey:@"age"];    [defaults setBool:YES forKey:@"rember"];        // 立刻同步,将内存信息同步到文件中    [defaults synchronize];
偏好设置读取数据代码:
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];    NSString *account = [defaults objectForKey:@"account"];    NSInteger age = [defaults integerForKey:@"age"];    BOOL rember = [defaults boolForKey:@"rember"];    NSLog(@"%@  %ld  %d",account,age,rember);

通过代码可以看出,偏好设置和plist的区别是,使用偏好设置保存数据,不需要获取目录和文件名。实际上,使用偏好设置保存数据时,不能够新建文件,只能保存到一个固定的文件中。

另外,因为偏好设置的本质仍然是plist保存,因此还是只能保存Foundation框架中自带的类,还是有一定的局限性。

方式三:

归档解档。

该方式能够将任何遵守了 NSCoding 协议的对象写入到文件中,且写入到文件中的数据是乱码,有一定的加密效果。

实现NSCoding协议,需要实现 - (void)encoderWithCoder:(NSCoder *)encoder  和 - (id)initWithCoder:(NSCoder *)decoder 两个方法。

示例如下:

/** *  将某个对象写入文件时会调用 *  在这个方法中说清楚哪些属性需要存储 */- (void)encodeWithCoder:(NSCoder *)encoder{    [encoder encodeObject:_name forKey:@"name"];    [encoder encodeInteger:_age forKey:@"age"];    [encoder encodeDouble:_height forKey:@"height"];}
/** *  从文件中读取某个对象时调用 *  在这个方法中说清楚属性应该如何获取 */- (id)initWithCoder:(NSCoder *)decoder{    if(self = [super init]){        _name = [decoder decodeObjectForKey:@"name"];        _age = [decoder decodeIntForKey:@"age"];        _height = [decoder decodeDoubleForKey:@"height"];    }    return self;}
对一个模型对象归档的代码:
Persion *person = [[Persion alloc] init];    person.name = @"test";    person.age = 15;    person.height = 1.70;        // 归档模型对象    NSString *doc = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject ];    NSString *filePath = [doc stringByAppendingPathComponent:@"person.data"];        [NSKeyedArchiver archiveRootObject:person toFile:filePath];
解档一个模型对象的方法:
NSString *doc = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject ];    NSString *filePath = [doc stringByAppendingPathComponent:@"person.data"];        Persion *person = [NSKeyedUnarchiver unarchiveObjectWithFile:filePath];    NSLog(@"%@   %d   %f",person.name,person.age,person.height);
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 医保卡丢了补办后卡里余额怎么办 银行卡丢了记不住卡号怎么办 哈尔滨医保卡挂失后又找到了怎么办 孩子在哈尔滨户口在外地医保怎么办 椒江二桥通行证被扣走了怎么办 住建委查到买房材料不真怎么办 房子租出去被别人又租出去了怎么办 在成都乘出租车房产证掉了怎么办 电信不限量卡限网速了怎么办 only实体店换货没有小票怎么办 运管所包车单不给盖章怎么办 上海留学生落户过了取号时间怎么办 电信固话怎么办才能显示自己公司 日本跟团签证没有资产证明怎么办 摇号手机号换了密码忘了怎么办 小客车摇号的账号密码忘了怎么办 去银行交违章罚款单子丢了怎么办 我的身份证被别人办了信用卡怎么办 北京驾驶证在深圳扣了分怎么办 c照一次被扣12分怎么办 教师资格证认定申请表填错了怎么办 外地车在北京违章没有牡丹卡怎么办 护士辞职了原单位不给延续怎么办 护士证注册的单位倒闭了怎么办 护士证注册的医院倒闭了怎么办 显示发货了但没物流信息怎么办 考科目三被别人举报了怎么办 科目一考了5没过怎么办 常州c1驾驶证满了12分怎么办 预约科目三成功后没交钱怎么办 预约成功后驾校不提交档案怎么办 c2刚满一年的驾照扣12分怎么办 怀孕6个月咳嗽很厉害怎么办 家门口有电线杆影响我建楼房怎么办 卡丢了不知道卡号怎么办 驾考网上预约用户被锁定了怎么办 人才中心拿出来的户口掉了怎么办 父母是南京集体户孩子没户口怎么办 二建挂靠中介单位不给证怎么办 小包工头遇到工人在工地摔伤怎么办 外地人买了城中村的房子改造怎么办