Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/107.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 组合自定义类的N编码_Ios_Objective C - Fatal编程技术网

Ios 组合自定义类的N编码

Ios 组合自定义类的N编码,ios,objective-c,Ios,Objective C,我有一个自定义类 @interface MyDevice : NSObject,<NSCoding>{ NSString *devicename; . . MyBattery *batteryInfo; } 但是说NSKeyedArchiver archivedDataWithRootObject:不调用encodeWithCoder,这是很糟糕的。我试着为我的电池编码。但同样的结果。有人能给它点颜色看看吗?要想让它正常工作,您的自定义类MyBattery本身应该符合NSCodin

我有一个自定义类

@interface MyDevice : NSObject,<NSCoding>{
NSString *devicename;
.
.
MyBattery *batteryInfo;
}

但是说
NSKeyedArchiver archivedDataWithRootObject:
不调用encodeWithCoder,这是很糟糕的。我试着为我的电池编码。但同样的结果。有人能给它点颜色看看吗?

要想让它正常工作,您的自定义类MyBattery本身应该符合NSCoding

如果是,尝试使用下面的电池信息

NSData * encodedData = [NSKeyedArchiver archivedDataWithRootObject:batteryInfo];
[[NSUserDefaults standardUserDefaults] setObject:encodedData  forKey:@"batteryInfo"];
还可以使用NSKeyedUnarchiver进行解码

NSData *data= [[NSUserDefaults standardUserDefaults] objectForKey:@"batteryInfo"];
MyBattery *batteryInfo= [NSKeyedUnarchiver unarchiveObjectWithData:data];
您需要将数据保存在NSDEFAULT或某些文件中


请验证结果并告知。

您的
MyBattery
课程还需要符合
NSCoding
协议。是的。MyBattery也是NSCoding兼容的。我需要MyDevice的一个编码对象(也对合成对象进行编码)通过NSNotiifcation发送对象。我的要求是不要像NSuserdefaults那样使用持久数据。你的意思是,上面的代码要添加到MyDevice的编码器中吗?是的,这应该是MyDevice类的一部分,用于存档MyBattery。由于您需要传输对象,只需跳过NSdefaults中的保存。谢谢bllakjakkless。问题解决了。我按照你的建议为batteryInfo添加了编码和解码。非常感谢。
NSData *data= [[NSUserDefaults standardUserDefaults] objectForKey:@"batteryInfo"];
MyBattery *batteryInfo= [NSKeyedUnarchiver unarchiveObjectWithData:data];