簡體   English   中英

鑰匙串項目更新時的 NSInternalInconsistencyException

[英]NSInternalInconsistencyException when keychain item update

我在我的應用程序中使用 keychain 和 keychainitemwrapper。 所以,我確實使用 setObject:(id) 方法更新了“kSecAttrAccessible”。
但是會出現錯誤。 像這樣,

由於未捕獲的異常“NSInternalInconsistencyException”而終止應用程序,原因:“無法更新鑰匙串項目。”

這是我的來源

KeychainItemWrapper *wrapper = [[KeychainItemWrapper alloc] initWithIdentifier:@"UserData" accessGroup:@"49YVVGB32W.com.covimdm.daelim.pushData"];
NSString *PushData = [NSString stringWithFormat:@"%@::%@::%@", sLoginId, [[[PushManager defaultManager] info] pushServiceID], [[[PushManager defaultManager] info] host]];
[wrapper setObject:PushData forKey:(id)kSecValueData];
[wrapper setObject:(id)kSecAttrAccessibleAfterFirstUnlock forKey:(id)kSecAttrAccessible];

發生錯誤的部分是第四行代碼。

[wrapper setObject:(id)kSecAttrAccessibleAfterFirstUnlock forKey:(id)kSecAttrAccessible];

我不知道為什么錯誤一次又一次地發生。

編輯

好的,讓我們再試一次。 您使用的包裝庫似乎是專門針對單個對象的,因此當您添加鑰匙串屬性時,它似乎會崩潰。 但是,如果您先這樣做,它似乎會起作用。 所以首先加載配置,然后加載如下項目數據,它應該可以工作。

    KeychainItemWrapper *wrapper = [[KeychainItemWrapper alloc] initWithIdentifier:@"UserData"
                                       accessGroup:@"49YVVGB32W.com.covimdm.daelim.pushData"];

    NSString * pushString = @"Some string";
    NSData   * pushData   = [pushString dataUsingEncoding:NSUTF8StringEncoding];

    [wrapper setObject:kSecAttrAccessibleAfterFirstUnlock
            forKey:kSecAttrAccessible]; // Do configuration first
    [wrapper setObject:pushString // Must be string!?
            forKey:kSecValueData];

上面的代碼在這方面工作,盡管從這里使用KeychainItemWrapper 從源代碼看來,每次設置對象時都會寫入該項目,因此我認為您首先需要進行配置。

此外,如果我按照之前的建議存儲數據,它也不起作用。 看來您必須存儲字符串。 上面的代碼在這方面工作得很好,希望它對你也有同樣的作用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM