Можно ли упаковать структуру C в NSKeyedArchiver в Какао? - PullRequest
3 голосов
/ 17 сентября 2011

Я программирую приложение для iOS, которое должно очень эффективно взаимодействовать с приложением Python через UDP-сокеты.

В середине у меня есть служба Bonjour, которая служит мостом для моего приложения iOS и хост-приложения Python для общения.

Я строю свой собственный протокол, который является простой структурой Си. Код, который у меня уже был, в виде упаковочных строк в сущности NSKeyedArchiver, которые, в свою очередь, будут упакованы в NSData и отправлены. На другой стороне есть NSKeyedUnarchiver.

Проблема в том, что он не может понять структуру C, которую я отправляю. Есть ли способ поместить структуру C в NSKeyedArchiver? Как мне изменить мой средний сервис, чтобы удалить это?

Ответы [ 2 ]

4 голосов
/ 17 сентября 2011

Да, это возможно.

Прочтите Руководство по программированию архивов и сериализаций , здесь все объясняется с примерами, включая этот случай, особенно часть Кодирование и декодирование CТипы данных :)

0 голосов
/ 17 сентября 2011

Вместо использования NSData - и если структура содержит простые элементы данных, а не указатели объектов, вы можете использовать NSValue

NSValue valueFromStruct = [[NSValue value:&aStruct withObjCType:@encode(YourStructType)] retain];

Поскольку NSValue соответствует протоколу NSCoding, вы можете использовать методы, которые вы хотите использовать.

...