【问题标题】:iOS Keychain Crashing While Getting Details获取详细信息时 iOS 钥匙串崩溃
【发布时间】:2015-12-31 18:33:32
【问题描述】:

使用钥匙串将登录信息存储到我的应用程序时遇到了一些问题。它工作得很好,并且会在我进出其他应用程序时显示信息,但是一旦我完全关闭应用程序并尝试重新打开它并单击以恢复登录信息,应用程序就会崩溃。我将附上代码以及错误日志。我确实明白,我在网上阅读的大多数人都没有使用这个版本的钥匙串,人们似乎使用替代钥匙串脚本,但希望有人遇到了这个问题。我有 3 个按钮和 2 个文本字段来测试它。一个用于用户名的文本字段,一个用于密码的文本字段,然后我有一个用于登录的按钮来保存信息,一个用于查看信息的按钮,然后是一个注销按钮。

谢谢。

Dec 31 01:58:13 Curtis-iPhone uDropOff 3[18034] : -[__NSCFData rangeOfCharacterFromSet:]: 无法识别的选择器发送到实例 0x147ed0338 Dec 31 01:58:13 Curtis-iPhone uDropOff 3[18034]: * 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:'-[__NSCFData rangeOfCharacterFromSet:]: 无法识别的选择器发送到实例 0x147ed0338' * 第一次抛出调用栈:(0x180eed900 0x18055bf80 0x180ef461c 0x180ef15b8 0x180df568c 0x186529988 0x185c206f4 0x1000c0194 0x185c17e50 0x185c17dcc 0x185bffa88 0x185c176e4 0x185c17314 0x185c0fe30 0x185be04cc 0x185bde794 0x180ea4efc 0x180ea4990 0x180ea2690 0x180dd1680 0x1822e0088 0x185c48d90 0x1000c4980 0x1809728b8) 12 月 31 日 01:58:13 柯蒂斯-iPhone SpringBoard [15499]:HW kbd:无法将(空)设置为键盘 焦点 12 月 31 日 01:58:13 Curtis-iPhone com.apple.xpc.launchd[1] (UIKitApplication:uDropOff.uDropOff-3[0x44ca][18034]): 服务因信号而退出:中止陷阱:6 Dec 31 01:58:13 Curtis-iPhone 诊断 [15528]:无法找到偏移量 0x809679a4 在拱“arm64”的共享缓存中 12 月 31 日 01:58:13 柯蒂斯-iPhone 报告崩溃[18035]: platform_thread_get_unique_id 匹配 6392471 Dec 31 01:58:13 Curtis-iPhone ReportCrash[18035] : 为 尸体[18034] uDropOff 3 Dec 31 01:58:13 Curtis-iPhone ReportCrash[18035]:保存类型“109_uDropOff 3”报告(5 个 最多 25) 作为 /var/mobile/Library/Logs/CrashReporter/uDropOff 3_2015-12-31-015813_Curtis-iPhone.ips 12 月 31 日 01:58:13 Curtis-iPhone 跳板[15499]:应用 'UIKitApplication:uDropOff.uDropOff-3[0x44ca]' 崩溃了。 12月31日 01:58:13 Curtis-iPhone UserEventAgent[15467]: 20372720635010:id=uDropOff.uDropOff-3 pid=18034,状态=0 12 月 31 日 01:58:23 Curtis-iPhone 定位 [15505] :位置图标应该 现在处于“非活动”状态

- (void)viewDidLoad
{

    [super viewDidLoad];

    keychain = [[KeychainItemWrapper alloc] initWithIdentifier:@"uDropOffLoginData" accessGroup:nil];

}
- (IBAction)viewkeychain {
    if ([[keychain objectForKey:(id)kSecAttrAccount]  isEqual: @""])
    {
        self.username.text = @"nousername";
        self.password.text = @"nopassword";

    }
    else
    {
    self.username.text = [keychain objectForKey:(id)kSecAttrAccount];
    self.password.text = [keychain objectForKey:(id)kSecValueData];
    }


}
- (IBAction)logout {
    [keychain resetKeychainItem];

}
    - (IBAction)signin {
    [keychain setObject:[_username text] forKey:(id)kSecAttrAccount];
    [keychain setObject:[_password text] forKey:(id)kSecValueData];


}

【问题讨论】:

  • 在崩溃发生时检查 Xcode 中的调用堆栈,并告诉我们在您的代码中发生崩溃的位置。
  • 您能告诉我该怎么做吗?我不知道有什么方法可以在我关闭应用切换器中的应用后保持它与 Xcode 断开连接。
  • 你能重现它吗?如果可以,您可以尝试注销 [_username text] 和 [_password text] 的值是什么,在我看来这两个无效
  • @CurtisBoylan 当您从 SpringBoard 重新启动应用程序和从 Xcode 重新启动应用程序时,您应该得到相同的行为,不是吗?否则,您应该有一个可用于相同目的的崩溃日志。
  • 一切正常保存似乎工作正常,直到我关闭应用程序然后重新打开并尝试查看保存的数据。我可以转到另一个应用程序并让该应用程序在后台保持打开状态,然后返回该应用程序,它仍会保存,但如果我使用应用程序切换器关闭它,当我重新打开它并单击以获取保存的信息时它会崩溃。

标签: ios keychain keychainitemwrapper


【解决方案1】:

我自己修复了此代码,将 kSecValueData 更改为 kSecAttrService 一切正常,不再发生崩溃。

【讨论】:

    猜你喜欢
    • 2016-12-10
    • 1970-01-01
    • 2011-03-24
    • 1970-01-01
    • 2016-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-24
    相关资源
    最近更新 更多