我希望能够转换 Objective-C 对象,例如 NSArray
或UIImage
进入NSData
对象,然后我可以使用它写入磁盘。我首先将它们转换为 NSValue
,然后我计划将其转换为 NSData
。 This question提供了部分答案,但当他们正在使用NSNumber
时,他们实际上并不需要将其转换回 NSValue
.
我见过其他问题,例如 this one依赖于NSKeyedArchiver
,但由于会发生巨大的尺寸膨胀,我想避免这种情况。
因此,我目前的代码用于编码 NSData
来自 NSValue
的对象,从第一个问题来看,如下:
+(NSData*) dataWithValue:(NSValue*)value {
NSUInteger size;
const char* encoding = [value objCType];
NSGetSizeAndAlignment(encoding, &size, NULL);
void* ptr = malloc(size);
[value getValue:ptr];
NSData* data = [NSData dataWithBytes:ptr length:size];
free(ptr);
return data;
}
我的问题是如何解码 NSData
已以这种方式编码的对象并返回原始 objCType
来自NSValue
?
我假设我会使用类似的东西
[NSValue valueWithBytes:[data bytes] objCType:typeHere];
我如何取回类型信息?
最佳答案
使用NSKeyedArchiver
保存项目,使用NSKeyedUnarchiver
恢复对象。该对象必须符合 NSCoding
,并且在集合的情况下,所有包含的项目也必须符合 NSCoding
。
请参阅 Apple 文档 NSKeyedArchiver和 NSCoder
关于objective-c - 将 NSValue 转换为 NSData,然后以正确的类型再次转换回来,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30828964/