首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在KeyChainItemWrapper崩溃中保存密码

在KeyChainItemWrapper崩溃中保存密码
EN

Stack Overflow用户
提问于 2013-11-03 02:13:17
回答 2查看 20K关注 0票数 14

苹果在他们的GenericKeyChain样本代码中提供了GenericKeyChain样本代码类。在SO上有一个ARC编辑的解决方案,我试图遵循这个解决方案:包装器存储在KeyChain on iOS上。

包装器的用法如下:

代码语言:javascript
运行
复制
KeychainItemWrapper *keychain = [[KeychainItemWrapper alloc] initWithIdentifier:@"F11-email-auth" accessGroup:nil];
[keychain setObject:[emailTextfield text] forKey:(__bridge id)(kSecMatchEmailAddressIfPresent)];
[keychain setObject:[passwordTextfield text] forKey:(__bridge id)(kSecClassGenericPassword)];

接受带有电子邮件文本字段的行。但是,带有密码的第二行崩溃,例外情况如下。

代码语言:javascript
运行
复制
Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Couldn't add the Keychain Item.'
*** First throw call stack:
(
    0   CoreFoundation                      0x01b445e4 __exceptionPreprocess + 180
    1   libobjc.A.dylib                     0x018c78b6 objc_exception_throw + 44
    2   CoreFoundation                      0x01b44448 +[NSException raise:format:arguments:] + 136
    3   Foundation                          0x014a823e -[NSAssertionHandler handleFailureInMethod:object:file:lineNumber:description:] + 116
    4   Feeltracker                         0x000053b3 -[KeychainItemWrapper writeToKeychain] + 899
    5   Feeltracker                         0x00004700 -[KeychainItemWrapper setObject:forKey:] + 272
    6   Feeltracker                         0x000092d6 -[FTLoginViewController connectToAccount:] + 374
    7   libobjc.A.dylib                     0x018d9874 -

可能是什么原因?我想知道它是否与我使用的常量有关。

更新:

多亏了罗曼底的帮助:

这一点似乎会抛出错误:

代码语言:javascript
运行
复制
// No previous item found; add the new one.
result = SecItemAdd((__bridge CFDictionaryRef)[self dictionaryToSecItemFormat:keychainItemData], NULL);
NSAssert( result == noErr, @"Couldn't add the Keychain Item." );

结果是-50。SecItemAdd是一个lib方法。正如我所预料的,这与KeyChain的直接处理有关.

keychainItemData包含:

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-11-07 09:48:24

我不能再得到这个苹果的例子,因为密钥链包装器的工作。幸运的是,对这个问题的进一步研究揭示了这个解决方案,它对我是有效的。

请注意,解决方案的最初答案不是ARC‘’ed,但是有人如此好心地创建了一个Github上的弧形版本。我用了那个,效果很好。

它是一个围绕密钥链的包装器,它的工作甚至比原来的更简单。

希望这能帮助其他有类似问题的人。

票数 15
EN

Stack Overflow用户

发布于 2016-10-10 20:43:19

在模拟器上运行应用程序时,我也犯了同样的错误,但它在设备上工作得很好。

为了解决模拟器的问题,我不得不打开“共享密钥链权限”。

共享密钥链权利

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19749160

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档