gpt4 book ai didi

iphone - 在自定义类的子类上使用 NSCoding

转载 作者:太空狗 更新时间:2023-10-30 03:40:07 26 4
gpt4 key购买 nike

我正在使用 NSCoding 来存档/取消存档自定义类作为数据持久化的方法。如果对象是 NSObject 的子类,它工作正常,但我也有对象是自定义对象的子类。我是否需要更改 initWithCoder: 方法以及 encodeWithCoder?现在,特定于子类的属性可以很好地编码/解码,但子类从父类(super class)继承的属性则不能。有什么想法吗?这是基本结构:

@interface NewsItem : NSObject <NSCoding, NSCopying> {
//properties for the super class here
}

@implementation NewsItem
- (void)encodeWithCoder:(NSCoder *)coder {
[coder encodeObject:itemName forKey:kItemNameKey];
//etc etc
}

- (id)initWithCoder:(NSCoder *)coder {
if ( (self = [super init]) )
{
self.itemName = [coder decodeObjectForKey:kItemNameKey];
//etc etc
}
return self;
}

-(id)copyWithZone:(NSZone *)zone {
NewsItem *copy = [[[self class] allocWithZone: zone] init];
copy.itemName = [[self.itemName copy] autorelease];
//etc etc
return copy;
}

和子类:

@interface File : NewsItem {
NSString *fileSizeString;
//etc etc
}

@implementation File
- (void)encodeWithCoder:(NSCoder *)coder {
[super encodeWithCoder:coder]; //added this, but didn't seem to make a difference
[coder encodeObject:fileSizeString forKey:kFileSizeStringKey];
//etc etc

}

- (id)initWithCoder:(NSCoder *)coder {
if ( (self = [super init]) )
{
self.fileSizeString = [coder decodeObjectForKey:kFileSizeStringKey];
//etc etc
}
return self;
}

-(id)copyWithZone:(NSZone *)zone {
File *copy = (File *)[super copyWithZone:zone];
copy.fileSizeString = [[self.fileSizeString copy] autorelease];
//etc etc
return copy;
}

最佳答案

FileinitWithCoder: 方法中

if ( (self = [super init]) )

应该是

if ( (self = [super initWithCoder:coder]) )

关于iphone - 在自定义类的子类上使用 NSCoding,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7904298/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com