IOS数据保存

来源:互联网 发布:dlp数据防泄密 知乎 编辑:程序博客网 时间:2024/06/05 07:54
持久化数据(数据保存)IOS数据存储常用的方式1、XML属性列表(plist)归档2、Preference(偏好设置)3、NSKeyedArchiver归档4、Sqlite35、Core Data数据存储位置:每个应用都有自己的应用沙盒(应用沙盒就是自己的文件系统目录),与其他应用隔离路径:/Users/apple/Library/Application Support/Iphone Simulator/7.0/Application应用沙盒的文件系统一级目录:Layer---------------应用程序包,包含所有的资源文件和可执行文件Documents-----------保存应用运行时生成需要持久化的数据,iTunes同步设备时,会备份该目录,重要数据存放,比如游戏存档Library-------------tmp-----------------保存应用程序的临时数据,当软件没有运行时,系统可能随机清理掉该目录下文件Library下目录,二级目录:Library/Caches-------保存应用运行时生成需要持久化数据,但是iTunes不会备份它Library/Prference----保存应用的偏好设置,iTunes同步设备时,会备份该目录,一般是系统操作,我们不用操作//////////////////////////////////////////////////////数据存储案例一(plist存储)如果对象是NSString、NSDictionary、NSArray、NSData、NSNumber等类型,就可以使用writeToFile:atomically:方法直接将对象写到属性列表文件中缺点:只能存常见数据类型,如模型Person则不能存储/** *  数据存储 */- (IBAction)save{    //1、获取沙盒根路径    NSString *home = NSHomeDirectory();    //2、document路径    NSString *docuPath = [home stringByAppendingPathComponent:@"Documents"];        //3、新建数据    //存数组    NSArray *data = @[@"jack", @10, @"jack love rose"];    NSString *filePath = [docuPath stringByAppendingPathComponent:@"data.plist"];    [data writeToFile:filePath atomically:YES];    //存字典    NSDictionary *dict = @{@"Tom":@"23", @"Jerry":@"12", @"Cookie":@"32", @"Xiao":@"43"};    NSString *fileDictPath = [docuPath stringByAppendingPathComponent:@"data2.plist"];    [dict writeToFile:fileDictPath atomically:YES];        NSLog(@"%@", filePath);    }///////////////////////////////////////////////////////** *  数据读取 */- (IBAction)read{    //读取    //1、获取沙盒根路径    NSString *home = NSHomeDirectory();        //2、document路径    NSString *docuPath = [home stringByAppendingPathComponent:@"Documents"];        //3、文件路径    NSString *filePath = [docuPath stringByAppendingPathComponent:@"data.plist"];        //4、读取数据    NSArray *array = [NSArray arrayWithContentsOfFile:filePath];    NSLog(@"%@", array);    }数据存储案例二(偏好设置存储)存储简单的软件参数配置偏好存储不用关心存储的路径,默认会找到缺点:不能改变路径和保存的文件的名字///////////////////////////////////////////////////////** *  数据存储 */- (IBAction)save{    //1、利用NSUserDefaults就能直接访问软件的偏好设置    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];        //2、存储数据    [defaults setObject:@"fl" forKey:@"account"];    [defaults setInteger:20 forKey:@"age"];    [defaults setBool:true forKey:@"aotologin"];        //3、立刻同步    [defaults synchronize];        NSLog(@"%@", NSHomeDirectory());}/** *  数据读取 */- (IBAction)read{    //1、利用NSUserDefaults就能直接访问软件的偏好设置    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];        //2、读取数据    NSString *name = [defaults objectForKey:@"account"];    NSInteger *age = [defaults integerForKey:@"age"];    BOOL isAutoLogin = [defaults boolForKey:@"aotologin"];    }//////////////////////////////////////////////////////数据存储三(普通对象Person\Student...)逻辑:1、普通对象如果想完成存储,则该对象必须遵守<NSCoding>协议eg: @interface Person : NSObject <NSCoding>2、因为遵守了协议时为了实现某个方法- (void)encodeWithCoder:(NSCoder *)encoder 方法,在这个方法中告诉存储里需要存储哪些字段eg:/** *  将对象写入文件之前会调用这个方法 *  在这个方法说清楚:1、哪些属性需哟存储,2、怎样存储这些属性 */- (void)encodeWithCoder:(NSCoder *)encoder{    //将_name属性值进行编码    [encoder encodeObject:_name forKey:@"name"];        //存储年龄    [encoder encodeInt:_age forKey:@"age"];}3、调用方法,完成存储/** *  数据存储 */- (IBAction)save{    /**     * 保存一个Person对象     */    Person *p = [[Person alloc] init];    p.name = @"jack";    p.age = 24;    p.height = 1.54;        NSString *path = @"/Users/fulin/Desktop/person.data";//这里文件名和格式可以任意命名    [NSKeyedArchiver archiveRootObject:p toFile:path];   }4、数据的读取根据上面模式,对象存储的时候遵守协议,完成方法,自然读取的时候也是同样的做法@interface Person : NSObject <NSCoding>  同上遵守同一个协议实现某个方法- (id)initWithCoder:(NSCoder *)aDecoder/** *  将对象读取 * */- (id)initWithCoder:(NSCoder *)decoder{    if (self == [super init]) {        _name = [decoder decodeObjectForKey:@"name"];        _age = [decoder decodeObjectForKey:@"age"];    }    return self;}调用方法读取:/** *  数据读取 */- (IBAction)read{    //1、路径    NSString *path = @"/Users/fulin/Desktop/person.data";//这里文件名和格式可以任意命名        //2、读取    Person *p = [NSKeyedUnarchiver unarchiveObjectWithFile:path];    NSLog(@"%@", p.name);}补充:如果是子类,需要完成上面普通对象存储,则继承中,重写某个遵守协议的方法,同时调用父类的方法

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 淘宝店铺的浏览量越来越少怎么办 网上充手机话费充错了怎么办 夜神模拟器上陌陌的位置不对怎么办 如果在大庭广众之下放了个屁怎么办 淘宝分销上传宝贝被系统下架怎么办 酷狗喜欢歌单里面的歌都没了怎么办 苹果手机下载不了微信缓冲怎么办 登陆微信提示版本过低登不了怎么办 苹果手机微信版本过低登不上怎么办 微信小程序显示微信版本过低怎么办 三星手机登微信显示版本过低怎么办 微信版本低无法登录无法升级怎么办 手机淘宝五应用界面无法打开怎么办 入住淘宝主播没有微博粉丝怎么办 手机淘宝领金币怎么没有了怎么办 淘宝荬家缺货对付款买家怎么办 淘宝买家确认收货后申请退款怎么办 淘宝东西失效了但付过款了怎么办 淘宝图片被投诉盗图怎么办原图没了 淘宝退款申请不小心撤销了怎么办 淘宝不小心点了撤销退款怎么办 淘宝上退款不小心撤销了怎么办 新店淘宝卖家想开通直播怎么办 想开通淘宝直播却没有粉丝怎么办 淘宝店家拒绝给我改地址怎么办0 淘宝被投诉卖假申诉失败怎么办 要退保证金但是有人买东西了怎么办 手机淘宝上我是商家停止服务怎么办 淘宝上买的电脑商家关闭了怎么办 淘宝链接复制链链接发不出去怎么办 淘宝卖家填错地址货已经发了怎么办 拼多多没交保证金无法提现怎么办 信用卡被别人刷了没证据怎么办 我在淘宝开个店卖衣服没人买怎么办 收货地址填错了卖家已发货怎么办 淘宝店上的供货商不发货怎么办 在淘宝买的花退到卖家后死了怎么办 在淘宝买东西付款开通了花呗怎么办 淘宝网投诉卖家也不处理问题怎么办 淘宝图片空间上传不了大图片怎么办 不小心把设置里打印机删掉了怎么办