gpt4 book ai didi

ios - APPDelegate 中的 openURL 转换错误 NSString -> String (Swift & iOS8)

转载 作者:行者123 更新时间:2023-11-28 05:34:59 25 4
gpt4 key购买 nike

我目前正在开发一个集成 Facebook 的 iOS 应用程序,我在使用 Swift 对此进行调查时遇到了一些问题(使用 ObjC 我没有问题)。

问题是,这是当来自另一个应用程序(在本例中是 WebBrowser 中的 FB)时在 appDelegate 中执行的方法:

func application(
application: UIApplication,
openURL url: NSURL,
sourceApplication: NSString,
annotation: AnyObject)
-> Bool {
let appString : String = sourceApplication as String // Try to convert format => EXCEPTION
let appString : String = String(sourceApplication) // 'SSS' Suggestion: EXCEPTION
println(sourceApplication) // Try to print the value => EXCEPTION
return FBAppCall.handleOpenURL(url, sourceApplication:sourceApplication,
withSession:session) // With Parse => EXCEPTION
}

在该方法中,我在“sourceApplication”参数方面遇到了真正的麻烦。我尝试使用它,但出现异常。我尝试转换它,另一个异常......甚至无法记录它的值,因为它在访问它的值时崩溃了。将函数签名中的参数类型更改为 String 均无效。

这是我遇到的错误:

EXEC_BAD_ACCESS

在我读到这绝对是一个有值(value)的提示之前,我一直能够追踪:

ObjectiveC.NSString.__conversion (ObjectiveC.NSString)() -> Swift.String

会不会是 iOS8 的错误?你们中有人遇到过这个问题和/或知道如何解决吗?

最佳答案

你犯了两个错误:

  1. 来自 app Delegate 的函数声明是 func application(application: UIApplication!, openURL url: NSURL!, sourceApplication: String!, annotation: AnyObject!) -> Bool : sourceApplication是一个可选的字符串值,而不是 NSString。

  2. 由于 sourceApplication 是可选的,它可能返回 nil 值(在您的情况下返回 nil)。将 nil 类型转换为 String 是不安全的,因此会崩溃。

解决方案:

  1. 在你的情况下不需要类型转换因为返回值是String类型
  2. 使用可选的表单类型转换运算符 as? 来安全地类型转换即

如果让 appString = sourceApplication {
println(appString as?String)
}

关于ios - APPDelegate 中的 openURL 转换错误 NSString -> String (Swift & iOS8),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24240631/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com