这是我第一次尝试序列化/反序列化对象。该对象的一个成员是一种const char *。
---------------------------------------- 此处添加了信息< /强> ----------------------------------
此const char *是表示图像的字节数组。由于图像识别要求,我真的需要从UI获取值并从UI返回并将其存储为字节数组。我希望这可以解决一些困惑。
-------------------------------------------的端此处 -------------------------------
我对解码和编码的选项感到困惑。我无法理解使用哪个选项,唯一有意义的是要求at:(const void *)数组。那里有什么?
- (id)initWithCoder:(NSCoder *)decoder
{
self = [super init];
if (self) {
以下是我无法弄清楚的界限。我有前两个参数好,但第三个参数是什么? at:的参数是一个数组。但我没有阵列。我应该将这些解码为数组吗?如果是这样,那么我需要初始化一个数组以将字符放入?
_templateData = [decoder decodeArrayOfObjCType:_templateData count:_templateSize at:<#(void *)#>]; //const char *templateData;
之后似乎没问题:
_templateSize = [decoder decodeIntegerForKey:@"templateSize"]; //NSUInteger templateSize;
_templateQuality = [decoder decodeIntForKey:@"templateQuality"]; //int templateQuality;
_templateLocation = [decoder decodeIntForKey:@"templateLocation"]; //int templateLocation;
}
return self;
}
然后有编码。
- (void)encodeWithCoder:(NSCoder *)coder
{
这里的问题相同。我没有阵列。我是否需要初始化数组以将字符放入?是这条线应该如何工作?
[coder encodeArrayOfObjCType:_templateData count:_templateSize at:<#(const void *)#>]
其余的再次显示正常:
[coder encodeInteger:_templateSize forKey:@"templateSize"];
[coder encodeInt:_templateQuality forKey:@"templateQuality"];
[coder encodeInt:_templateLocation forKey:@"templateLocation"];
}
有没有人成功编码并解码了一个const char *?
的类型感谢您的帮助。
答案 0 :(得分:2)
听起来最好的解决方案是将您的数据数组转换为NSData实例,并对其进行编码。它很简单:
NSData *data = [NSData dataWithBytesNoCopy:_templateData length:lengthOfTemplateData freeWhenDone:NO];
[coder encodeObject:data forKey:@"templateData"];
然后,解码:
NSData *data = [decoder decodeObjectForKey:@"templateData"];
[data getBytes:_templateData length:sizeOfTemplateDataBuffer]; // Assumes _templateData has been allocated to hold sizeOfTemplateDataBuffer bytes.