NSData от NSKeyedArchiver до NSString - PullRequest
7 голосов
/ 24 мая 2011

Я пытаюсь преобразовать NSData, сгенерированный из NSKeyedArchiver, в NSString, чтобы я мог передать его и в конечном итоге преобразовать обратно в NSData.Я должен передать это как строку (я использую три20 URL-адреса).Я прошел через различные кодировки, UTF8, ASCII и т. Д. И не могу заставить что-либо работать.NSKeyedArchiver говорит, что NSData формируется как список свойств: NSPropertyListBinaryFormat_v1_0.

Кто-нибудь знает, как я могу преобразовать эти NSData в строку и обратно?Размер строки не имеет значения.

Спасибо

Ответы [ 3 ]

12 голосов
/ 11 июля 2013

То, что вы хотите:

id<nscoding> obj;

NSData * data     = [NSKeyedArchiver archivedDataWithRootObject:obj];
NSString * string = [data base64EncodedString];

А затем наоборот

NSString * string;

NSData * data    = [NSData dataFromBase64String:string];
id<nscoding> obj = [NSKeyedUnarchiver unarchiveObjectWithData:data]

Вы можете добавить base64EncodedString и dataFromBase64String: с доступной здесь категорией NSData NSData +Base64 но теперь он включен по умолчанию

2 голосов
/ 02 марта 2016

iOS 9.2.1, Xcode 7.2.1, ARC включена

base64EncodedString, dataFromBase64String: устарело после iOS 7.0

Обновленное решение:

Кодирование в строку:

id<nscoding> obj;

NSData *data     = [NSKeyedArchiver archivedDataWithRootObject:obj];
NSString *string = [data base64EncodedStringWithOptions:NSDataBase64EncodingEndLineWithLineFeed];

Декодирование к данным:

NSString *string;

NSData *data    = [[NSData alloc] initWithBase64EncodedString:string options:(NSDataBase64DecodingIgnoreUnknownCharacters)];
id<nscoding> obj = [NSKeyedUnarchiver unarchiveObjectWithData:data];

Примечание. Это очень полезно при работе с цепочкой для ключей для сохранения словаря пар ключ / значение в kSecValueData.

Надеюсь, это кому-нибудь поможет! Приветствия.

0 голосов
/ 24 мая 2011

Все, что вам нужно сделать, это что-то вроде этого:

NSData *dataFromString = [[NSString stringWithFormat:@"%@", yourString] dataUsingEncoding:NSASCIIStringEncoding];

затем извлечь данные:

NSString *stringFromData = [[NSString alloc] initWithData:dataFromString encoding:NSASCIIStringEncoding];
...