zoukankan      html  css  js  c++  java
  • objective-C 自定义对象归档的实现

    自定义对象要实现归档必须实现NSCoding协议

    NSCoding协议有两个方法,encodeWithCoder方法对对象的属性数据做编码处理,initWithCoder解码归档数据来初始化对象。

    #import <Foundation/Foundation.h>


    @interface user : NSObject <NSCoding>

    @property(nonatomic,retain)NSString *name;

    @property(nonatomic,retain)NSString *email;

    @property(nonatomic,retain)NSString *pwd;

    @property(nonatomic,assign)int age;

    @end

    #import "user.h"

    #define AGE @"age"

    #define NAME @"name"

    #define EMAIL @"email"

    #define PASSWORD @"password"


    @implementation user


    //对属性编码

    - (void)encodeWithCoder:(NSCoder *)aCoder

    {

        [aCoder encodeInt:_ageforKey:@"age"];

        [aCoder encodeObject:_nameforKey:AGE];

        [aCoder encodeObject:_emailforKey:EMAIL];

        [aCoder encodeObject:_pwdforKey:PASSWORD];

    }


    //对属性解码

    - (id)initWithCoder:(NSCoder *)aDecoder

    {

        self=[super init];

        if(self)

        {

            self.age=[aDecoderdecodeIntForKey:AGE];

            self.name=[aDecoderdecodeObjectForKey:NAME];

            self.email=[aDecoderdecodeObjectForKey:EMAIL];

            self.pwd=[aDecoderdecodeObjectForKey:PASSWORD];

        }

        returnself;

    }


    -(void)dealloc

    {

        [_name release];

        [_email release];

        [_pwd release];

        [super dealloc];

    }

    @end

    main函数的调用

        user *userObj=[[user alloc] init];
            userObj.age=33;
            userObj.email=@"adfdadf@qq.com";
            userObj.pwd=@"212212";
            userObj.name=@"ricard";
            
            NSString *path=[NSHomeDirectory() stringByAppendingPathComponent:@"Desktop/custom.text"];
            BOOL succ=[NSKeyedArchiver archiveRootObject:userObj toFile:path];
            if (succ) {
                        NSLog(@"Hello, World!");
                user *usertemp=[NSKeyedUnarchiver unarchiveObjectWithFile:path];
                
            }
    



  • 相关阅读:
    0102-进程操作(面向对象简单工厂模式,打开输入文件)
    0101-进程操作(变量命名)
    win10无法成功完成操作因为文件包含病毒或潜在的垃圾软件如何处理
    序列化和反序列化
    __slot__的用法
    python中typeguard包
    pandas如何将多个DataFrame写入同一个excel工作簿中
    DEAP库遗传算法
    【教程】如何把喜马拉雅音频下载到电脑
    oracle安装路径查看方式
  • 原文地址:https://www.cnblogs.com/james1207/p/3358020.html
Copyright © 2011-2022 走看看