Tôi đang sử dụng NSCoding để lưu trữ/hủy lưu trữ một lớp tùy chỉnh làm phương thức lưu giữ dữ liệu. Nó hoạt động tốt nếu đối tượng là một lớp con của NSObject, nhưng tôi cũng có các đối tượng là các lớp con của các đối tượng tùy chỉnh. Tôi có cần thay đổi phương thức initWithCoder: cũng như encodeWithCoder không? Ngay bây giờ, các thuộc tính dành riêng cho lớp con mã hóa/giải mã tiền phạt, nhưng các thuộc tính mà lớp con kế thừa từ lớp cha thì không. Có suy nghĩ gì không? Dưới đây là cấu trúc cơ bản:Sử dụng NSCoding trên lớp con của lớp tùy chỉnh
@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;
}
và lớp con:
@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;
}
tôi có nhưng một dấu kiểm để cung cấp..và SO cho tôi biết bạn là người cũ. cảm ơn. –