A имеет число 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 байта архивируются до 142 байтов NSData, а 8 байтов CGPoint использует 260 байтов при архивировании на NSData. Сохранение количества данных, присланных до минимума, имеет решающее значение для того, что я делаю.