zoukankan      html  css  js  c++  java
  • iOS高级-数据存取


    一、XML属性列表(plist)归档
    1>拖2个按钮(保存和读取)并监听
    2>实现方法

    -(IBAction)save
    {
    //1.获得沙盒路径
    NSString *path = NSHomeDirectory();
    //2.document路径
    NSString *docPath = [home stringByAppendingPathComponent:
    @"Documents"];
    //3.新建数据 //只能存NSString/字典/数组/NSDate等基本OC对象类型 NSArray *data = @[@“jack”,@10@"ffsf"]; NSString *filepath = [docPath stringByAppendingPathComponent: @"data.plist"]; [data writeToFile:filepath atomically:YES]; }
    -(IBAction)read
    {
    //1.获得沙盒路径 NSString *path = NSHomeDirectory(); //2.document路径 NSString *docPath = [home stringByAppendingPathComponent: @"Documents"]; //3.文件路径 NSString *filepath = [docPath stringByAppendingPathComponent: @"data.plist"]; //4.读取数据 NSArray *data = [NSArray arrayWithContentsOfFile:filepath]; }

    二、偏好设置
    1>拖2个按钮(保存和读取)并监听
    2>实现方法

    -(IBAction)save
    {
    //1.利用NSUserDefaults就能直接访问软件的偏好设置(Library/Preferences) NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; //2.存储数据 [defaults setObject:@"mj" forKey:@"account"]; [defaults setInteger:10 forKey:@"age"]; //3.立刻同步 [defaults synchronize]; }
    -(IBAction)read
    {
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    
    NSString *account = [defaults objectForKey:@"account"];
    }

    三、NSKeyedArchiver归档(存储自定义类型的对象)
    1>新建一个person类,并添加几条属性
    2>拖2个按钮(保存和读取)并监听
    3>实现方法

    -(IBAction)save
    {
    MJPerson *p = [[MJPerson alloc] init];
    p.name = @"Jack";
    p.age = 10;
    p.height = 155;
    NSString *path = 桌面;
    //归档
    [NSKeyedArchiver archiveRootObject:p toFile:path];
    }
    -(IBAction)read
    {
    NSString *path = 桌面;
    
    //读档(反归档)
    [NSKeyedUnarchiver unarchiveObjectWithFile:path]; 
    }

    4>person遵守<NSCoding协议>,并实现2个协议方法

    #pragma mark 将对象归档的时候会调用(将对象写入文件之前会调用)
    //在这个方法中说清楚
    //1.哪些属性需要存储
    //2.怎样存储这些属性
    -(void)encodeWithCoder:(NSCoder *)encoder
    {
    //将_name属性值进行编码(会将_name的值存进文件)
    [encoder encodeObject:_name forKey:@"name"];
    [encoder encodeInt:_age forKey:@"age"];
    }
    
    #pragma mark 当从文件中解析对象时调用
    //在这个方法中说清楚
    //1.哪些属性需要解析(读取)
    //2.怎样解析(读取)这些属性
    -(void)initWithCoder:(NSCoder *)decoder
    {
    if(self = [super init]){
    _name = [decoder decodeObjectForKey:@"name"]; 
    _age= [decoder decodeObjectForKey:@"age"]; 
    } 
    return self;
    }

    数据存储总结:
    1.plist属性列表
    1>适用对象:仅仅是Foundation框架中自带的一些类,比如
    NSString/NSArray/NSDictionary/NSSet/NSNumber/NSData
    2>调用对象的writeToFile 方法就可以写入文件
    3>调用对象的XXXwithContentsOfFile方法就可以从文件中读取对象内容

    2.偏好设置
    1>本质还是plist属性列表的方式进行存储
    2>存取非常简单
    * 不用关心文件夹和文件名
    3>缺点:只能存储到一个文件中(不能存放大批量数据)

    3.NSCoding
    1>能将任何遵守了NSCoding协议的对象塞进文件中
    2>实现2个协议方法
    #pragma mark 将对象归档的时候会调用(将对象写入文件之前会调用)
    //在这个方法中说清楚
    //1.哪些属性需要存储
    //2.怎样存储这些属性
    -(void)encodeWithCoder:(NSCoder *)encoder

    #pragma mark 当从文件中解析对象时调用
    //在这个方法中说清楚
    //1.哪些属性需要解析(读取)
    //2.怎样解析(读取)这些属性
    -(void)initWithCoder:(NSCoder *)decoder

    3>若新建一个子类(而且有新的属性)想要归档和读档,那么必须自己重写这2个方法,先调用父类的这2个方法,然后将新加的属性进行编码和解码即可。

    注意:父类的属性由父类来存储,即使子类使用了父类的属性,也不要让子类来存储这个父类的属性。

    4.SQLite
    1>适用于存储大批量数据

    5.Core Data
    1>iOS 5.0出现
    2>效率低下(封装了SQLite3)

    6.网络

  • 相关阅读:
    第一次作业
    第五次作业
    第四次作业
    第三次作业
    第二次作业
    第一次作业
    第五次作业
    第四次作业
    第三次作业
    第二次作业
  • 原文地址:https://www.cnblogs.com/marshall-yin/p/4738574.html
Copyright © 2011-2022 走看看