NSUserDefault用法

方法很简单,一行代码就可以搞定

//保存
- (void)saveValue:(NSString *)value forKey:(NSString *)key
{
    [[NSUserDefaults standardUserDefaults] setObject:value forKey:key];
}

//读取
- (void)readValueforKey:(NSString *)key
{
    [[NSUserDefaults standardUserDefaults] objectForKey:key];
}

注意

  1. NSUserDefault只能保存特定类型的对象:NSData, NSString, NSNumber, NSDate, NSArray, NSDictionary。如果想要存储其它类型,需要将打包成NSData类型。
  2. 如果保存其他类型的对象,会报错

    [User Defaults] Attempt to set a non-property-list object <xxx: 0x170029600> as an NSUserDefaults/CFPreferences value for key str

自定义Model打包NSData类型

  1. 新建一个类Model,实现NSCoding协议
    Model.h
    #import <Foundation/Foundation.h>
    
    @interface Model : NSObject<NSCoding>
    
    @property (nonatomic, copy) NSString *name;
    @property (nonatomic, copy) NSString *number;
    @property (nonatomic, assign) int user_id;
    
    @end
    
    Model.m
    #import "Model.h"
    
    @implementation Model
    
      - (void)encodeWithCoder:(nonnull NSCoder *)aCoder {
    [aCoder encodeObject:_name forKey:@"name"];
    [aCoder encodeObject:_number forKey:@"number"];
    [aCoder encodeObject:[NSNumber numberWithInt:_user_id] forKey:@"user_id"];
    }
    
    - (nullable instancetype)initWithCoder:(nonnull NSCoder *)aDecoder {
    self = [super init];
    if (self) {
        _name = [aDecoder decodeObjectForKey:@"name"];
        _number = [aDecoder decodeObjectForKey:@"number"];
        _user_id = [[aDecoder   decodeObjectForKey:@"user_id"] intValue];
        }
        return self;
    }
    @end
    
  2. 在需要打包成NSData的地方
    //存数据
    NSData *data = [NSKeyedArchiver archivedDataWithRootObject:model];
    [[NSUserDefaults standardUserDefaults] setObject:data forKey:@"data"];
    
    //取数据
    NSData *daa = [[NSUserDefaults standardUserDefaults] objectForKey:@"data"];
    Model *newModel = [NSKeyedUnarchiver unarchiveObjectWithData:daa];
    
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • iOS 開発の結構 画面 UI UIWebview [[UIApplication sharedApplicati...
    RencaiXiong阅读 606评论 0 0
  • *面试心声:其实这些题本人都没怎么背,但是在上海 两周半 面了大约10家 收到差不多3个offer,总结起来就是把...
    Dove_iOS阅读 27,219评论 30 472
  • 站在前辈的肩膀上前行 UIKit框架和Foundation框架 所有的Mac OS X和IOS程序都是由大量的对象...
    zysmoon阅读 8,758评论 0 16
  • 今天学习了抽象类和拷贝构造函数 class 类名{virtual 类型 函数名(参数表)=0;...} 抽象类掌握...
    老翟_4856阅读 184评论 0 0
  • 今天是2017注会考试的第一天,我收拾好自己准备出门时退缩了。这次的考试我又没有准备,早就想过逃脱。可是我的朋友不...
    当阳光照在脸上阅读 125评论 0 0