Keychain Wrapper由于未捕获的异常'NSInvalidArgumentException'而导致应用程序停止,原因:' - [_ NSZeroData _fastCharacterContents]

时间:2013-11-25 20:20:14

标签: ios keychain keychainitemwrapper

我正在使用此处的钥匙串包装器:

https://gist.github.com/1170641

像这样:

.h:

    #import "KeychainItemWrapper.h"

    KeychainItemWrapper *keychainItem;

.m:

 keychainItem = [[KeychainItemWrapper alloc] initWithIdentifier:@"login" accessGroup:nil];

NSString *password = [keychainItem objectForKey:(__bridge id)kSecValueData];
NSString *username = [keychainItem objectForKey:(__bridge id)kSecAttrAccount];

然后它崩溃了:

由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:' - [_ NSZeroData _fastCharacterContents]:无法识别的选择器发送到实例0x14dcba60'

修改

由于回答了问题的用户,崩溃不再存在,但是当我检索用户名或密码时,他们有时会被抄袭,我的意思是80%的时间。

2 个答案:

答案 0 :(得分:3)

编辑: 我正在使用kSecValueData,但在KeychainItemWrapper.m中注释掉了//#define PASSWORD_USES_DATA。此外,我开始使用resetKeychainItem而不是尝试自己覆盖值。

旧答案: 我遇到了这个问题,直到我将kSecValueData更改为kSecAttrService,根据SecItem.h,它也可以用于密码。现在一切似乎都很好(设置和检索)。

答案 1 :(得分:1)

我有一个类似的问题,我通过改变它来修复它:

NSString *password = [keychainItem objectForKey:(__bridge id)kSecValueData];
NSString *username = [keychainItem objectForKey:(__bridge id)kSecAttrAccount];

到此:

NSString *password = [[NSString alloc] initWithData:[keychainItem objectForKey:(id)kSecValueData] encoding:NSUTF8StringEncoding];
NSString *username = [keychainItem objectForKey:(id)kSecAttrAccount];