У меня есть несколько NSValue
(полученных через KVC valueForKey
), которые мне нужно добавить к объекту NSData
, чтобы отправить его по сети с помощью Game Center. Очевидно, мне также нужно будет преобразовать NSValue
обратно из NSData
для большего количества KVC (setValue:forKey:
).
Я не знаю точного типа каждого NSValue
, поэтому я ограничен использованием интерфейсов, предоставляемых NSValue
и NSData
. Я должен отметить, что NSValue
никогда не являются указательными типами.
Я удивлен, что нет [NSData dataWithValue:value]
, а также чего-то вроде [value dataWithEncoding:]
или подобного. Но, возможно, я слеп и не вижу очевидного выбора. Я подумал об использовании getValue:
для копирования значения в void*
буфер, но как мне определить длину буфера, кроме как используя objCType
и сравнивая его со всеми возможными типами?
Как мне поступить?
ПРИМЕЧАНИЕ:
NSKeyedArchiver
не обсуждается, потому что он ужасно неэффективен. Флоат размером 4 байта архивируется в NSData
размером 142 байта, CGPoint
размером 8 байт использует 260 байт при архивации в NSData
. Сохранение минимального объема отправляемых данных имеет решающее значение для того, что я делаю.