Сохраните NSArray в KeychainItemWrapper
Я должен сохранить NSArray (который содержит NSString и BOOL) в KeychainItemWrapper, чтобы повторно использовать его в другом ViewController и сохранить его в памяти, даже если приложение закрыто.
Я уже видел этот вопрос, но он мне не поможет, потому что я не могу найти файлы SBJsonWriter.
Может кто-нибудь может мне помочь, пожалуйста?
Спасибо большое.
Хорошего дня!
2 ответа
SBJsonWriter - сторонняя библиотека JSON, популярная много лет назад, теперь в iOS есть встроенная.
Сериализуйте данные как JSON, используя собственный NSJSONSerialization, а затем запишите их в цепочку для ключей (предполагая, что kSecValueData зашифрован):
NSArray* array = ...;
NSData* jsonData = [NSJSONSerialization dataWithJSONObject:array options:0 error:nil];
NSString* jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
[keychainItem setObject:jsonString forKey:(__bridge id)kSecValueData];
Чтобы прочитать данные обратно в NSArray:
NSString* jsonString = [keychainItem objectForKey:(__bridge id)kSecValueData];
NSArray* array = nil;
if(jsonString.length > 0)
{
id jsonObject = [NSJSONSerialization JSONObjectWithData:[jsonString dataUsingEncoding:NSUTF8StringEncoding] options:0 error:nil];
// Type check because the JSON serializer can return an array or dictionary
if([jsonObject isKindOfClass:[NSArray class]])
array = jsonObject;
}
// use your array variable here, it may be nil
Вы можете использовать класс NSJSONSerialization от Apple, чтобы сделать то, что ваш связанный ответ использует SBJsonWriter.
Пример:
NSData* jsonData = [NSJSONSerialization dataWithJSONObject:myArray options:0 error:&error];
NSString* jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
Затем запишите jsonString в свою цепочку для ключей.
Чтобы полностью изменить процесс, извлеките jsonString из цепочки для ключей и сделайте следующее:
NSArray* myArray = [NSJSONSerialization JSONObjectWithData:jsonString options:0 error:&error];