ios - 组合自定义类的 NSEncoding

标签 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。我尝试为 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/

相关文章:

jquery - Ajax 调用在 ios 中立即失败,文本状态为 : error and HTTP status 0 on Cordova,

ios - 解雇 Controller 委托(delegate)方法不起作用

iphone - 如何在返回运行循环之前刷新显示

android - 从 viewDidLoad() 执行 Segue

iphone - UIAlertView 不响应 UIAlertViewDelegate

ios - 试图理解一个简单的陈述

ios - 应用因持久存储创建崩溃而被拒绝

iOS下载并播放mp3文件

ios - 使用ASIHTTPRequest下载PDF,模拟器可以,但是设备出现ASIHTTPRequest错误

iphone - UIButton 选定状态在 iOS 7 中不起作用