2013-10-01 2 views
0

Я хочу сохранить NSArray с помощью KeychainItemWrapper классаКак мы можем сохранить NSArray используя класс KeychainItemWrapper (ARC)

Я пришел, чтобы знать, что мы можем хранить NSDictionary после прочтения This Question

но не работает

Это то, что я сделал до сих пор

NSArray *myArray = [[NSArray alloc]initWithObjects:@"Hello1",@"Hello2",@"Hello3",@"Hello4", nil]; 
NSDictionary *myDic = [[NSDictionary alloc]initWithObjectsAndKeys:myArray, @"arrayKey", nil]; 

NSString *error; 
NSData *dictionaryRep = [NSPropertyListSerialization dataFromPropertyList:myDic format:NSPropertyListXMLFormat_v1_0 errorDescription:&error]; 

KeychainItemWrapper *keychain = 
[[KeychainItemWrapper alloc] initWithIdentifier:@"MyIdentifier" accessGroup:nil]; 

[keychain setObject:dictionaryRep forKey:(__bridge id)kSecValueData]; 

Но он падает на последней строке, где мы устанавливаем объект.

ERRO Журналы:

2013-10-01 12:16:47.590 stackoverflowtry[3883:a0b] -[__NSCFData dataUsingEncoding:]: unrecognized selector sent to instance 0xa1686a0 
2013-10-01 12:16:47.593 stackoverflowtry[3883:a0b] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFData dataUsingEncoding:]: unrecognized selector sent to instance 0xa1686a0' 

нужна помощь.

+0

Пожалуйста, дайте мне знать, как сохранить либо NSDictionary или NSArray, как будет работать для меня .. –

+0

Почему вы используете «(__bridge идентификатор) kSecValueData "в качестве ключа для хранения в словаре ?, вы зарегистрировали это значение, чтобы проверить значение? – josh

+0

@josh: (__bridge id) kSecValueData - это предопределенный ключ в файле KeychainItemWrapper.m ... Я не знаю, что нам разрешено использовать пользовательские ключи ... и этот код отлично работает, если я просто передаю NSString вместо словаряRep. –

ответ

1

У меня есть идея. вы можете попробовать это. Вы должны #import "SBJsonWriter.h"

NSArray *myArray = [[NSArray alloc]initWithObjects:@"Hello1",@"Hello2",@"Hello3",@"Hello4", nil]; 
NSDictionary *myDic = [[NSDictionary alloc]initWithObjectsAndKeys:myArray, @"arrayKey", nil]; 


KeychainItemWrapper *keychain = 
[[KeychainItemWrapper alloc] initWithIdentifier:@"MyIdentifier" accessGroup:nil]; 

    SBJsonWriter *jsonWriter = [[SBJsonWriter alloc] init]; 
    NSString *jsonString = @""; 

     jsonString = [jsonWriter stringWithObject:myDic]; 

    [keychain setObject:jsonString forKey:(__bridge id)(kSecAttrDescription)]; 

Если вы хотите получить его

NSString *JsonString= [keychain objectForKey:(__bridge id)(kSecAttrDescription)]; 
NSArray *myArray= [[JsonString JSONValue] objectForKey:@"arrayKey"]; 
+0

эй .. Я попробую это. –

+0

, если вы попробуете нормально, проголосовать за меня plz: D – Luna

+0

Удачи ... его не работает ... :( –

Смежные вопросы