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