钥匙串存储导致应用程序崩溃

时间:2013-11-15 17:24:32

标签: iphone objective-c keychain

我使用KeychainItemWrapper进行钥匙串存储。当我使用forkey:(__bridge id)kSecAttrAccount时,一切正常。但是当我使用forKey:(__bridge id)(kSecValueData)]应用时崩溃会在控制台*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Couldn't add the Keychain Item.'中显示此消息

- (IBAction)saveOne:(id)sender
{
    // save edits

    keychainItemWrapper1 = [[KeychainItemWrapper alloc] initWithIdentifier:@"one" accessGroup:nil];
    [keychainItemWrapper1 setObject:[userOne text] forKey:(__bridge id)(kSecValueData)];

    keychainItemWrapper2 = [[KeychainItemWrapper alloc] initWithIdentifier:@"two" accessGroup:nil];
    [keychainItemWrapper2 setObject:[userTwo text] forKey:(__bridge id)kSecValueData];

    keychainItemWrapper3 = [[KeychainItemWrapper alloc] initWithIdentifier:@"three" accessGroup:nil];
    [keychainItemWrapper3 setObject:[userThree text] forKey:(__bridge id)kSecValueData];
}


-(IBAction)reset:(id)sender{
    keychainItemWrapper1 = [[KeychainItemWrapper alloc] initWithIdentifier:@"one" accessGroup:nil];
    [keychainItemWrapper1 resetKeychainItem];

    keychainItemWrapper2 = [[KeychainItemWrapper alloc] initWithIdentifier:@"two" accessGroup:nil];
    [keychainItemWrapper2 resetKeychainItem];

    keychainItemWrapper3 = [[KeychainItemWrapper alloc] initWithIdentifier:@"three" accessGroup:nil];
    [keychainItemWrapper3 resetKeychainItem];

}

任何人都可以帮助我。

提前致谢。

1 个答案:

答案 0 :(得分:0)

您可能需要在KeychainItemWrapper类中查看 - (NSMutableDictionary *)dictionaryToSecItemFormat:(NSDictionary *)dictionaryToConvert方法。具体来说,请查看您用于写入钥匙串的NSMutableDictionary。您是否将密钥设置为在SecItemAdd或SecItemUpdate函数中使用的字典的kSecValueData?如果没有,那可能就是问题所在。