A have a number of NSValue
(obtained via KVC valueForKey
) that I need to append to an NSData
object in order to send it over the network using Game Center. Obviously I will also need to convert the NSValue
back from NSData
for more KVC (setValue:forKey:
).
I don't know the exact type of each NSValue
, so I'm limited to using the interfaces provided by NSValue
and NSData
. I should mention that the NSValue
are never pointer types.
I'm surprised that there's no [NSData dataWithValue:value]
and neither something like [value dataWithEncoding:]
or similar. But maybe I'm blind and not seeing the obvious choice. I thought about using getValue:
to copy the value into a void*
buffer, but how am I supposed to determine the buffer length other than by using objCType
and comparing that with all possible types?
How should I go about this?
NOTE:
NSKeyedArchiver
is out of the question because it is terribly inefficient. A 4 Byte float is archived to a 142 Bytes NSData
, a 8 Byte CGPoint
uses 260 Bytes when archived to NSData
. Keeping the amount of data sent to a minimum is crucial to what I'm doing.