преобразование объекта NSDictionary в объект NSData и наоборот - PullRequest
16 голосов
/ 01 июля 2010

Мне нужно преобразовать NSDictionary объект в NSData, и далее я должен получить тот же NSDictionary из NSData объекта. Как мне это сделать?

Ответы [ 2 ]

32 голосов
/ 01 июля 2010

используйте NSKeyedArchiver

Чтобы преобразовать NSDictionary в NSData

NSMutableData *data = [[NSMutableData alloc]init];
NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc]initForWritingWithMutableData:data];
[archiver encodeObject:YOURDICTIONARY forKey: YOURDATAKEY];
archiver finishEncoding];
[data writeToFile:YOURFILEPATH atomically:YES];
[data release];
[archiver release];

Чтобы вернуть NSDictionary из сохраненных NSData

NSData *data = [[NSMutableData alloc]initWithContentsOfFile:YOURFILEPATH];
NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data];
YOURDICTIONARY = [unarchiver decodeObjectForKey: YOURDATAKEY];
[unarchiver finishDecoding];
[unarchiver release];
[data release];
2 голосов
/ 08 августа 2014

Гораздо более простая версия ответа Роберта:

[NSKeyedArchiver archiveRootObject:YOURDICTIONARY toFile:YOURFILEPATH];

И, соответственно:

YOURDICTIONARY = [NSKeyedUnarchiver unarchiveObjectWithFile:YOURFILEPATH];

Или ответить на вопрос в том виде, в котором он был задан изначально, без вложения файла в вещи:

NSData *data = [NSKeyedArchiver archivedDataWithRootObject:YOURDICTIONARY];
...
YOURDICTIONARY = [NSKeyedUnarchiver unarchiveObjectWithData:data];

Это все фабричные методы, поэтому это один и тот же код с ARC или без; используемые методы были доступны начиная с OS X v10.2 и в iOS с первого дня.

...