![](/img/trans.png)
[英]NSInternalInconsistencyException: Couldn't update the Keychain Item
[英]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.