我有一个自定义类
@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。我尝试过使用NScoding进行MyBattery。但结果相同。任何人都可以对它有所了解吗?
答案 0 :(得分:1)
为此,您的自定义类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或某个文件中。
请验证结果并告知。