使用正确的类型将NSValue转换为NSData并再次返回

时间:2015-06-14 11:46:50

标签: objective-c core-data nsdata nsvalue

我希望能够将一个Objective-c对象(例如NSArrayUIImage)转换为NSData对象,然后我可以使用该对象写入磁盘。我首先将它们转换为NSValue,然后我计划转换为NSDataThis 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

我如何取回类型信息?

2 个答案:

答案 0 :(得分:1)

使用NSKeyedArchiver保存项目,使用NSKeyedUnarchiver恢复对象。该对象必须符合NSCoding,并且在集合的情况下,所有包含的项目也必须符合NSCoding

请参阅NSKeyedArchiverNSCoder

的Apple文档

答案 1 :(得分:1)

您的方法仅适用于NSValue中的基本类型(int,float,没有指针的结构,......)。否则,您将只获得无意义的指针值,但不会获得NSData对象中的实际数据。

要同时传递实际类型字符串,您还必须找到一种方法来在NSData对象中获取它。并非不可能,但它无法解决您的实际问题。

使用密钥存档作为zaph建议要好得多。