组合自定义类的NSEncoding

时间:2014-09-22 15:51:22

标签: ios objective-c

我有一个自定义类

@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。但结果相同。任何人都可以对它有所了解吗?

1 个答案:

答案 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或某个文件中。

请验证结果并告知。