UI24_NSUserDefaults

前述

1.NSUserDefaults只支持: NSString, NSNumber, NSDate, NSArray, NSDictionary.
2.如果把一个自定义的类存到一个NSArray里,然后再存到NSUserDefaults里也是不成功的
3.解决的方法是用自定义的<NSCoding>的协议方法,- (id) initWithCoder: (NSCoder *)coder方法和- (void) encodeWithCoder: (NSCoder *)coder方法(obj-c的协议protocol就是java的接口interface,然后把该自定义的类对象编码到NSData中,再从NSUserDefaults中进行读取。
4.这是个字典,创建方式叫单例   保存在偏好设置文件夹里的plist文件中
5.复杂对象归档,要签订nscoding方法,并且实现两个协议的方法,放在数组里的复杂对象归档也要签协议
6.一个自定义的类中有另一个自定义类的对象,那么所有的类都要实现NSCoding

1.存入字符串再读取字符串

NSString *str = [NSString stringWithStrig:@"nihao"];
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];

存入步骤:
[userDefaults setObject:string forKey:@"thisISkey"];

读取代码:
NSString *value = [userDefaults objectForKey:"thisISkey"];

2.存字典

要实现归档反归档的操作需要签订一个协议NSCoding

(1)自定义类的.h文件中
   @interface Student : NSObject <NSCoding>
   @property (nonatomic, copy) NSString *name;
   @property (nonatomic, copy) NSString *sex;
   @property (nonatomic, assign) NSInteger age;
   @property (nonatomic, copy) NSString *hobby;
//针对这四条属性,写一个自定义的初始化方法和便利构造器
   - (instancetype)initWithName:(NSString *)name
                 sex:(NSString *)sex
               hobby:(NSString *)hobby
                 age:(NSInteger)age;
   + (instancetype)studentWithName:(NSString *)name
                    sex:(NSString *)sex
                  hobby:(NSString *)hobby
                    age:(NSInteger)age;

   @end


(2)自定义的.m文件中
   签订完NSCoding协议之后需要实现两个协议方法,一个是归档的时候使用的,另一个是反归档的时候使用
   - (void)encodeWithCoder:(NSCoder *)aCoder
   {
      [aCoder encodeObject:_name forKey:@"name"];
      [aCoder encodeObject:_sex forKey:@"sex"];
      [aCoder encodeObject:_hobby forKey:@"hobby"];
      [aCoder encodeInteger:_age forKey:@"age"];
    //使用encode方法要和数据类型相互匹配 
   }
   - (id)initWithCoder:(NSCoder *)aDecoder
   {
      self = [super init];
      if (self) {
        self.name = [aDecoder decodeObjectForKey:@"name"];
        self.sex = [aDecoder decodeObjectForKey:@"sex"];
        self.hobby = [aDecoder decodeObjectForKey:@"hobby"];
        self.age = [aDecoder decodeIntegerForKey:@"age"];
      } 
      return self;
    }

    - (instancetype)initWithName:(NSString *)name
                 sex:(NSString *)sex
               hobby:(NSString *)hobby
                 age:(NSInteger)age
    {
        self = [super init];
        if (self) {
          self.name = name;
          self.sex = sex;
          self.hobby = hobby;
          self.age = age;
        }
       return self;
     }


(3)存取时通过NSData做载体
   Student *stu = [[Student alloc] init];
   NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
   NSData *defaultsData = [NSKeyedArchiver archivedDataWithRootObject:stu];
   [defaults setObject:defaultsData forKey:@"student"];
   [stu release];
   NSData *data = [defaults objectForKey:@"myBusinessCard"];
   stu = [NSKeyedUnarchiver unarchiveObjectWithData:data];
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值