2014-07-02 60 views
1

我要存儲一個NSArray(其中包含的NSString和BOOL)成KeychainItemWrapper重新使用它在另一個視圖控制器,並保持它在內存中,即使應用程序被關閉。商店一個NSArray成KeychainItemWrapper

我已經看到this question但它不會幫我,因爲我無法找到SBJsonWriter文件。

能有人可以幫助我嗎?

感謝很多。

祝您有美好的一天!

+0

字符串是否包含敏感信息? – trojanfoe

+0

NSArray如何存儲BOOL? – gran33

+2

你爲什麼想把它保存在鑰匙串中?它是高度保密的嗎? – jailani

回答

0

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

爲了讀取DA ta回到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 
+0

是否有可能我通過我的KeychainItem陣列中添加一些數據?我必須管理一個最喜歡的優惠(這是一個小廣告應用程序)系統,這些信息存儲爲一個數組。我想在用戶點擊「添加收藏夾」按鈕時添加它,並在用戶點擊「刪除收藏夾」按鈕時將其刪除。我希望你能理解我。非常感謝 – ben77650

+0

事實上,我想存儲一個包含NSArray的NSArray,你認爲這可能嗎? – ben77650

+0

@ ben77650在NSArray中,您可以添加包裝在NSNumber,NSStrings,NSArrays和NSDictionaries(包括嵌套)中的基本類型 - 這些類型可以串行化爲JSON字符串。然而,從你的解釋中,最喜歡的提供數據聽起來不像是敏感的,所以可能不需要在鑰匙串中安全地加密。記住鑰匙串是針對敏感信息的小部分,聽起來像你需要一個數據庫或保存到磁盤的.json/.plist文件。如果你需要一組複雜的數據,我推薦一個數據庫。 – SomeGuy

0

您可以使用蘋果的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];