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
. Сохранение количества данных, присланных до минимума, имеет решающее значение для того, что я делаю.