Цель C - Справка NSKeyedArchiver или NSUnKeyedArchiver - PullRequest
0 голосов
/ 27 апреля 2011

Я пытался найти хороший учебник по кодированию набора целых чисел и строк, оборачиванию их в массив и последующей архивации с использованием архиватора NSKeyed или NSUnkeyed (в конечном счете, чтобы затем поместить в объект NSData и передать его через Wi-Fi).

Например, у меня есть 3 целых и 3 строки с именем

int1 int2 int3 string1 строка2 string3

Может ли кто-нибудь предоставить мне пример кода или ссылку на хороший учебник, содержащий примеры того, как это сделать? Включая метод, с помощью которого мне нужно кодировать все мои объекты, так как я до сих пор не уверен в том, как это достигается при попытке также обернуть эти закодированные элементы в массив, а затем заархивировать их.

Я прочитал Руководство по программированию архивов и сериализаций на веб-сайте Apple, и оно не очень хорошо освещает, когда я пытаюсь обернуть все это в массив, а затем заархивировать его.

Если мне не нужно было также передавать строки, можно попробовать создать пакет ala GKRocket из CFSwappedFloat32, но строки довольно цельные.

Спасибо

1 Ответ

0 голосов
/ 27 апреля 2011

Не могли бы вы немного подробнее рассказать, где у вас проблемы?Все, что вам нужно сделать, это создать объект данных и архиватор, а затем начать архивирование.Когда закончите, вызовите -finishEncoding.

Давайте закодируем некоторую информацию о банковском счете:

const NSString *AccountHolderKey = @"account_holder";
const NSString *AccountNumberKey = @"account_number";
const NSString *AccountBalanceKey = @"account_balance";

//...

NSString *accountHolder = @"Johnny Appleseed";
int accountNumber = 12345;
int balance = 1250;

NSMutableData *archivedData = [NSMutableData data];
NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data];

[archiver encodeObject:accountHolder forKey:AccountHolderKey];
[archiver encodeInt:accountNumber forKey:AccountNumberKey];
[archiver encodeInt:balance forKey:AccountBalanceKey];

[archiver finishEncoding];
[archiver release];

// now you can do what you like with archivedData
...