我希望能够将一个Objective-c对象(例如NSArray
或UIImage
)转换为NSData
对象,然后我可以使用该对象写入磁盘。我首先将它们转换为NSValue
,然后我计划转换为NSData
。 This question提供了部分答案,但在与NSNumber
合作时,他们并不需要将其转换回NSValue
。
我已经看到其他问题,例如依赖于NSKeyedArchiver
的{{3}},但由于发生了巨大的通货膨胀,我想避开这种问题。
因此,我在第一个问题中编码来自NSData
的{{1}}对象的代码如下:
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
我如何取回类型信息?
答案 0 :(得分:1)
使用NSKeyedArchiver
保存项目,使用NSKeyedUnarchiver
恢复对象。该对象必须符合NSCoding
,并且在集合的情况下,所有包含的项目也必须符合NSCoding
。
答案 1 :(得分:1)
您的方法仅适用于NSValue中的基本类型(int,float,没有指针的结构,......)。否则,您将只获得无意义的指针值,但不会获得NSData对象中的实际数据。
要同时传递实际类型字符串,您还必须找到一种方法来在NSData对象中获取它。并非不可能,但它无法解决您的实际问题。
使用密钥存档作为zaph建议要好得多。