Ios 在KeyChainItemWrapper中保存密码时崩溃

Ios 在KeyChainItemWrapper中保存密码时崩溃,ios,ios7,keychain,keychainitemwrapper,Ios,Ios7,Keychain,Keychainitemwrapper,苹果公司在其产品中提供了KeyChainItemWrapper类。这里有一个弧形的解决方案,我正试图遵循它:在iOS上存储在钥匙链中 包装器的用法如下所示: KeychainItemWrapper *keychain = [[KeychainItemWrapper alloc] initWithIdentifier:@"F11-email-auth" accessGroup:nil]; [keychain setObject:[emailTextfield text] forKey:(__bri

苹果公司在其产品中提供了KeyChainItemWrapper类。这里有一个弧形的解决方案,我正试图遵循它:在iOS上存储在钥匙链中

包装器的用法如下所示:

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)];
接受带有电子邮件文本字段的行。 但是第二行密码崩溃,出现以下异常

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 -
原因可能是什么?我不知道这是否与我使用的常数有关

更新:

感谢rmaddy的帮助:

这似乎是抛出错误的位:

// 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方法。正如我所料,这在某种程度上与钥匙链处理直接相关

keychainItemData包含:

我再也无法得到这个苹果钥匙链包装器的例子了。 幸运的是,对这件事的进一步研究揭示了这一点,这对我很有用

请注意,解决方案的原始答案并不明确,但是有人非常友好地创建了一个解决方案。我用过那个,效果很好

它是一个围绕钥匙链的包装器,比原来的更简单


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

在模拟器上运行应用程序时,我也遇到了同样的错误,但在设备上工作得非常好

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


没有代码是什么意思?你想让我再次复制并粘贴我上面链接的整个包装吗?我已经向你展示了我所做的一切。(这是苹果的包装,不是第三方。在这里发表垃圾评论之前,点击给定的链接)Daij Djan,我不知道你今天过得不好,或者你只是表现得很幼稚。首先,你是垃圾评论,没有理由你开始向下投票/关闭,然后删除你自己的评论不被追踪。如果你不想帮忙,没关系。您所做的没有帮助,也不专业。请使用调试器并查看
SecItemAdd
的返回值(更新日志语句以包含结果代码)。然后搜索“无法添加Keychain项”错误消息,并查找引用相同错误代码的项。似乎有几个可能的原因。错误代码将大大缩小范围。@rmaddy非常感谢您的帮助。我已经更新了问题。错误代码为-50。快速查看文档表明,
-50
表示“传递给函数的一个或多个参数无效”。打开此选项可以解决我的问题。谢谢