1

我必须将 NSArray(包含 NSString 和 BOOL)存储到 KeychainItemWrapper 中,以便在另一个 ViewController 中重新使用它,并且即使应用程序关闭也将其保存在内存中。

我已经看到了这个问题,但这对我没有帮助,因为我找不到 SBJsonWriter 文件。

任何人都可以帮助我吗?

十分感谢。

祝你有美好的一天 !

4

2 回答 2

1

SBJsonWriter 是多年前流行的第 3 方 JSON 库,现在 iOS 内置了它。

使用原生 NSJSONSerialization 将数据序列化为 JSON,然后将其写入钥匙串(假设 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
于 2014-07-02T13:15:39.557 回答
0

您可以使用 Apple 的 NSJSONSerialization 类来执行链接答案使用 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];
于 2014-07-02T13:14:43.077 回答