iPad / iPhone сериализация 2D массив - PullRequest
0 голосов
/ 31 августа 2011

У меня есть 2D-массив, который определяет точки в одном или нескольких путях:

Путь № 1 = (1,1) (3,3) (6,6)

Путь № 2 = (5,3) (15,5) (16,46)

Вот мой код

NSArray path1 = make array of CGPoints
NSArray path2 = make array of CGPoints

NSMutableArray paths = [[NSMutableArray alloc] init];
[paths addObject:path1];
[paths addObject:path2];

Вопрос: Как сериализовать / десериализовать этот объект?

1 Ответ

0 голосов
/ 31 августа 2011

Пока все объекты в ваших массивах реализуют протокол NSCoding, что делает большинство классов по умолчанию, вы должны иметь возможность сериализовать всю структуру массива, используя NSKeyedArchiver.

Если архивирование / разархивирование непосредственно в / из файла, оно должно выглядеть примерно так:

NSString *filename = @"[filename]";
[NSKeyedArchiver archiveRootObject:paths toFile:filename];
paths = [NSKeyedUnarchiver unarchiveObjectWithFile:filename];

Если вы просто хотите получить необработанные данные, возможно, отправить их в NSUserDefaults или передать черезсети, это должно выглядеть примерно так:

NSData *binaryData = [NSKeyedArchiver archivedDataWithRootObject:paths];
paths = [NSKeyedUnarchiver unarchiveObjectWithData:binaryData];

Если у вас есть пользовательские классы в этих массивах, вам, возможно, придется реализовать NSCoder самостоятельно, что утомительно, но не сложно.

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

Дополнительная информация:

Справочник по классам NSCoder

Руководство по программированию архивов и сериализаций

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...