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