使用NSKeyedArchiver / NSKeyedUnarchiver存储NSObject [英] Storing NSObject using NSKeyedArchiver/ NSKeyedUnarchiver
问题描述
我有一个类对象:
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屋!