如何从单元中检索detailedText然后在函数中使用它?
我试图检索UITableView单元格(这是一个电话号码“字符串”)中包含的详细文本,然后在将打个电话的功能中使用它。如何从单元中检索detailedText然后在函数中使用它?
-
问题:
我的应用程序保持与错误崩溃“致命错误:意外发现零而展开的可选值” 即使是变量中的值。
我敢肯定,我在做什么毛病力展开可选
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
let cell = tableView.cellForRowAtIndexPath(indexPath)
let getPhone = cell?.detailTextLabel?.text
if indexPath.section == 0 && indexPath.row == 0 {
if let phoneNumber = getPhone{
openPhoneApp(phoneNumber)
}
}
// Open Phone App
func openPhoneApp(phoneNum: String){
UIApplication.sharedApplication().openURL(NSURL(string: "tel:\(phoneNum)")!)
}
不要使用武力,如果展开你不是100%确定它可以被解开。尽可能避免它!
你的openPhoneApp
函数必须收到一个非零字符串,所以一切正常,直到那一刻。
尝试更换您的力展开像这样的东西:
func openPhoneApp(phoneNum: String) {
guard let url = NSURL(string: "tel:\(phoneNum)") else {
print("badly formed telephone url")
return
}
UIApplication.sharedApplication().openURL(url)
}
虽然我认为你的函数的名字所暗示的,它会打开手机的应用程序,所以也许你应该去问一个正确形成的URL,就像这样:
func openPhoneApp(phoneURL: NSURL) {
UIApplication.sharedApplication().openURL(phoneURL)
}
和检查这种东西甚至称它之前:
if let phone = getPhone, phoneURL = NSURL(string: "tel:\(phone)") {
openPhoneApp(phoneURL)
}
是的,我从单元格中检索的电话号码是这样形成的“(510)222 2222”。 所以现在我摆脱了数字之间的空格,并且在调用“openPhoneApp”之前,我还摆脱了(510)周围的两个括号。 – AziCode
你有没有检查phoneNumber的变量的值?它可能是零。
你可以检查这个答案:我认为这会解决你的问题。
What does "fatal error: unexpectedly found nil while unwrapping an Optional value" mean?
明确这个答案
phoneNumber不是零,它包含我想要使用的字符串 – AziCode
请使用电话://方案,并随时调用
UIApplication.sharedApplication().canOpenURL
前
我不想使用textLabel,因为它只是一个标题,我需要检索包含我想要使用的电话号码的detailTextLabel – AziCode
请检查我的编辑 –
在函数的开始处设置一个断点,并检查每个属性是否为零。 – MCMatan
我看到的唯一的解包方法是在NSURL中,所以你可能会创建一个格式不正确的URL。 顺便说一句:不要强制拆包东西 –
Xcode建议解开它:“可选类型'NSURL的值?'不打开“ – AziCode