我有一个自定义类
@interface MyDevice : NSObject,<NSCoding>{
NSString *devicename;
.
.
MyBattery *batteryInfo;
}
MyBattery 是另一个自定义类。我想在 MyDevice 上使用如下编码:
- (void)encodeWithCoder:(NSCoder *)encoder
{
[encoder encodeObject: devicename];
.
.
[encoder encodeObject: batteryInfo]; // Is this Possible??
}
- (id)initWithCoder:(NSCoder *)decoder
{
self = [super initWithCoder: decoder];
if (nil != self) {
devicename = [decoder decodeObject];
.
.
batteryInfo = [decoder decodeObject]; // Is this possible??
}
return self;
}
但这是崩溃说 NSKeyedArchiver archivedDataWithRootObject:
不调用 encodeWithCoder。我尝试为 MyBattery 使用 NScoding。但同样的结果。任何人都可以阐明它吗?
最佳答案
为此,您的自定义类 MyBattery 本身应该符合 NSCoding 标准。
如果是,请尝试使用下面的 batteryInfo
NSData * encodedData = [NSKeyedArchiver archivedDataWithRootObject:batteryInfo];
[[NSUserDefaults standardUserDefaults] setObject:encodedData forKey:@"batteryInfo"];
同样使用NSKeyedUnarchiver解码。
NSData *data= [[NSUserDefaults standardUserDefaults] objectForKey:@"batteryInfo"];
MyBattery *batteryInfo= [NSKeyedUnarchiver unarchiveObjectWithData:data];
您将需要将数据保存在 NSDefaults 或某个文件中。
请验证结果并告知。
关于ios - 组合自定义类的 NSEncoding,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25978201/