zoukankan      html  css  js  c++  java
  • NSUserDefaults 、对象归档

     NSUserDefaults

    @interface Person : NSObject <NSCoding>
    @property (nonatomic, assign) NSInteger ID;
    @property (nonatomic, copy) NSString *name;
    @end

    // 存

     NSUserDefaults *user = [NSUserDefaults standardUserDefaults];

    [user  setInteger:ID forKey:@”ID”];
    [user setObject:name forKey:@”name”];

    [user synchronize];

    // 取

    NSInteger uId = [[[NSUserDefaults standardUserDefaults] integerValueForKey:@”ID”];
    NSString* name = [[NSUserDefaults standardUserDefaults] stringForKey:@”name”];

    按对象存取

    // 存
    [user setObject:self forKey:@”user”];

    [user synchronize];

    // 取
    User* u = [user objectForKey”@”user”];

    2.对象归档
    要使用对象归档,对象必须实现NSCoding协议.大部分Object C对象都符合NSCoding协议,也可以在自定义对象中实现NSCoding协议,要实现NSCoding协议,实现两个方法:
    - (void) encodeWithCoder:(NSCoder *)encoder ;

    -(void)initWithCoder:(NSCoder *)encoder.
    同时,建议对象也同时实现NSCopying协议,该协议允许复制对象,要实现NSCopying协议须实现 -(id)copyWithZone:(NSZone *)zone 方法 。
    @interface Person : NSObject <NSCoding>
    @property (nonatomic, assign) NSInteger ID;
    @property (nonatomic, copy) NSString *name;
    @end

    @implementation User
    // 以下两个方法一定要实现,不然在调用的时候会crash
    - (void)encodeWithCoder:(NSCoder *)aCoder; 
    {
    // 这里放置需要持久化的属性
    [aCoder encodeObject:[NSNumber numberWithInteger:self.ID] forKey:@”ID”];
    [aCoder encodeObject:self.name forKey:@"name"];
    }
    - (id)initWithCoder:(NSCoder *)aDecoder
    {
    if (self = [self init])
    {
    //  这里务必和encodeWithCoder方法里面的内容一致,不然会读不到数据
    self.userID = [[aDecoder decodeObjectForKey:@"ID"] integerValue];
    self.name = [aDecoder decodeObjectForKey:@"name"];
    }
    return self;
    }

    // 使用方法
    + (BOOL)save {
    NSError *error = nil;
    // 确定存储路径,一般是Document目录下的文件
    NSString* fileName = [self getFileName];
    NSString* filePath = [self getFilePath];
    if (![[NSFileManager defaultManager] createDirectoryAtPath:filePath withIntermediateDirectories:YES attributes:nil error:&error]) {
    NSLog(@”创建用户文件目录失败”);
    return NO;
    }
    return [NSKeyedArchiver archiveRootObject:self toFile:[fileName:userId]];
    }

    @end

  • 相关阅读:
    初涉「带权并查集」&&bzoj3376: [Usaco2004 Open]Cube Stacking 方块游戏
    【树形dp】7.14城市
    【树形背包】bzoj4033: [HAOI2015]树上染色
    【计数】51nod1677 treecnt
    【树链剖分 差分】bzoj3626: [LNOI2014]LCA
    【最短路径树】51nod1443 路径和树
    python--异常处理
    常用模块之hashlib,configparser,logging模块
    面向对象之反射及内置方法
    python之封装
  • 原文地址:https://www.cnblogs.com/lhx2015/p/4635680.html
Copyright © 2011-2022 走看看