El almacenamiento de datos -NSKeyedArchiver (a)

Ios en desarrollo, los datos almacenados en una de las formas se almacenan directamente en un archivo objeto. Un objeto directamente a un archivo que desea utilizar clase es NSKeyedArchiver. Para los objetos almacenados en el archivo para leer el uso necesario de otro NSKeyedUnarchiver clase. Estas dos clases están emparejados, pero el uso de estas dos clases de objetos se guardan en un archivo u objeto a analizar son condicionales a partir del archivo. NSCoding objeto debe implementar el acuerdo y lograr un acuerdo en el método. A continuación para guardar la clase de objeto personalizado CZPerson aprender a utilizar el ejemplo anterior para guardar o leer dos clases.

//
//  CZPerson.h
//
//  Created by pkxing on 14/12/8.
//  Copyright (c) 2014年 梦醒. All rights reserved.
//  自定义类必须实现NSCoding协议

#import <Foundation/Foundation.h>

@interface CZPerson : NSObject<NSCoding>
/**
 *  姓名
 */
@property(nonatomic,copy) NSString *name;

/**
 *  年龄
 */
@property(nonatomic,assign) int  age;

@end

//
//  CZPerson.m
//  Created by pkxing on 14/12/8.
//  Copyright (c) 2014年 梦醒. All rights reserved.
//

#import "CZPerson.h"

@implementation CZPerson

/**
 *  当保存对象到文件中的时候系统会调用这个方法
 *
 *  一般在这个方法中告诉系统如何保存对象的属性值
 */
- (void)encodeWithCoder:(NSCoder *)encoder {
    [encoder encodeObject:_name forKey:@"name"];
    [encoder encodeInteger:_age forKey:@"age"];
}

/**
 *  当从文件中初始化一个对象的时候系统会调用这个方法
 *
 *  一般在这个方法中告诉系统如何解析对象的属性值
 *
 *  @return 初始化好的对象
 */
- (id)initWithCoder:(NSCoder *)decoder {
    self = [super init];
    if (self) {
        _name = [decoder decodeObjectForKey:@"name"];
        _age = [decoder decodeIntegerForKey:@"age"];
    }
    return self;
}
@end

A continuación, puede guardar la imagen como los siguientes objetos en un archivo o leer desde un archivo. Recuerde: qué tipo de objeto se almacena, qué tipo de objeto se lee.

//
//  main.m
//  Created by pkxing on 14/12/8.
//  Copyright (c) 2014年 梦醒. All rights reserved.
//

#import <UIKit/UIKit.h>
#import "CZPerson.h"
int main(int argc, char * argv[]) {
    @autoreleasepool {
        // 1.创建一个 person 对象
        CZPerson *person = [[CZPerson alloc] init];
        person.name = @"pkxing";
        person.age = 27;
        
        // 2.将 person 对象保存到指定的文件中
        NSString *filePath = @"/Users/pkxing/desktop/person.data";
        [NSKeyedArchiver archiveRootObject:person toFile:filePath];
        
        // 3.从文件中读取 person 对象
        CZPerson *p = [NSKeyedUnarchiver unarchiveObjectWithFile:filePath];
        NSLog(@"%@",p);
    }
}
Resumen: El uso NSKeyedArchiver guardar un objeto en un archivo en dos condiciones:

1, que desea guardar el objeto debe seguir a un acuerdo NSCoding

2, el protocolo debe aplicarse en los dos métodos. Para más detalles, consulte el código

Publicado 10 artículos originales · ganado elogios 1 · vistas 5892

Supongo que te gusta

Origin blog.csdn.net/pkxwyf/article/details/41810167
Recomendado
Clasificación