使用NSKeyedArchiver / NSKeyedUnarchiver存储NSObject [英] Storing NSObject using NSKeyedArchiver/ NSKeyedUnarchiver

查看:189
本文介绍了使用NSKeyedArchiver / NSKeyedUnarchiver存储NSObject的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个类对象:



BookEntity.h

  import< Cocoa / Cocoa.h> 

@interface BookEntity:NSObject< NSCoding> {

NSString * name;
NSString * surname;
NSString * email;
}
@property(copy)NSString * name,* surname,* email;
@end

BookEntity.m

  #importBookEntity.h


@implementation BookEntity
@synthesize姓名,
- (void)encodeWithCoder:(NSCoder *)coder
{

[coder encodeObject:self forKey:@appEntity];

}
- (id)initWithCoder:(NSCoder *)coder
{
if(self = [super init])
{

self = [coder decodeObjectForKey:@appEntity];

}
return self;
}

并且为此类指定一些值,

  BookEntity * entity = [[BookEntity alloc] init]; 
entity.name = @Stewie;
entity.surname = @Griffin;
entity.email = @sg@example.com;

所以我想使用NSKeyedArchiver存储这个类,并用NSKeyedUnarchiver恢复。



我写入文件,但当我检索这个文件时,实体有任何值。



这是最好的方法是什么? p>

感谢。

解决方案

NSCoding 协议不正确。您不应该归档对象本身,您应该归档对象的属性,然后将其取消归档。这是你将如何做:

   - (void)encodeWithCoder:(NSCoder *)coder 
{
[coder encodeObject:self.name forKey:@name];
[coder encodeObject:self.surname forKey:@surname];
[coder encodeObject:self.email forKey:@email];
}
- (id)initWithCoder:(NSCoder *)coder
{
if(self = [super init])
{
self.name = [coder decodeObjectForKey:@name];
self.surname = [coder decodeObjectForKey:@surname];
self.email = [coder decodeObjectForKey:@email];
}
return self;
}


I have a class object like;

BookEntity.h

    import <Cocoa/Cocoa.h>

    @interface BookEntity : NSObject<NSCoding> {

        NSString *name;
        NSString *surname;
        NSString *email;
    }
@property(copy) NSString *name,*surname,*email;
@end

BookEntity.m

#import "BookEntity.h"


@implementation BookEntity
@synthesize name,surname,email;
- (void) encodeWithCoder: (NSCoder *)coder
{

    [coder encodeObject: self forKey:@"appEntity"];

}   
- (id) initWithCoder: (NSCoder *)coder
{
    if (self = [super init])
    {

        self = [coder decodeObjectForKey:@"appEntity"];

    }
    return self;
}

and I assign some values to this class,

BookEntity *entity = [[BookEntity alloc] init];
entity.name = @"Stewie";
entity.surname = @"Griffin";
entity.email = @"sg@example.com";

so I want to store this class using NSKeyedArchiver and restore with NSKeyedUnarchiver.

I write to file but when I retrieve this file the entity has any value.

What is the best way to do this?

Thanks.

解决方案

Your use of the NSCoding protocol is incorrect. You shouldn't be archiving the object itself, you should be archiving the properties of your object and then unarchiving them afterwards. This is how you would do it:

- (void) encodeWithCoder: (NSCoder *)coder
{
    [coder encodeObject:self.name forKey:@"name"];
    [coder encodeObject:self.surname forKey:@"surname"];
    [coder encodeObject:self.email forKey:@"email"];
}   
- (id) initWithCoder: (NSCoder *)coder
{
    if (self = [super init])
    {
        self.name = [coder decodeObjectForKey:@"name"];
        self.surname = [coder decodeObjectForKey:@"surname"];
        self.email = [coder decodeObjectForKey:@"email"];
    }
    return self;
}

这篇关于使用NSKeyedArchiver / NSKeyedUnarchiver存储NSObject的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆