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

Я хочу сохранить NSArray с помощью класса KeychainItemWrapper

Я узнал, что мы можем сохранить NSDictionary после прочтения этот вопрос

Но это не работает

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

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];

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

Журналы ошибок:

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'

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


person Prashant Nikam    schedule 01.10.2013    source источник
comment
Пожалуйста, дайте мне знать, как сохранить NSDictionary или NSArray, оба будут работать для меня.   -  person Prashant Nikam    schedule 01.10.2013
comment
Почему вы используете (__bridge id)kSecValueData в качестве ключа для хранения в словаре? Вы регистрировали это значение для проверки значения?   -  person josh    schedule 01.10.2013
comment
@josh : (__bridge id)kSecValueData - это предопределенный ключ в файле KeychainItemWrapper.m ... Я не думаю, что нам разрешено использовать определяемые пользователем ключи .... и этот код работает нормально, если я просто передаю NSString вместо DictionRep.   -  person Prashant Nikam    schedule 01.10.2013


Ответы (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"];
person Luna    schedule 01.10.2013
comment
NSlog(@JsonString = ,jsonString); возврат jsonString = ? вы создаете KeychainItemWrapper *keychain = [[KeychainItemWrapper alloc] initWithIdentifier:@demo accessGroup:nil]; ? - person Luna; 04.10.2013