如何从单元中检索detailedText然后在函数中使用它?

如何从单元中检索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)")!) 
} 

enter image description here

+0

在函数的开始处设置一个断点,并检查每个属性是否为零。 – MCMatan

+1

我看到的唯一的解包方法是在NSURL中,所以你可能会创建一个格式不正确的URL。 顺便说一句:不要强制拆包东西 –

+0

Xcode建议解开它:“可选类型'NSURL的值?'不打开“ – AziCode

不要使用武力,如果展开你不是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) 
} 
+0

是的,我从单元格中检索的电话号码是这样形成的“(510)222 2222”。 所以现在我摆脱了数字之间的空格,并且在调用“openPhoneApp”之前,我还摆脱了(510)周围的两个括号。 – AziCode

你有没有检查phoneNumber的变量的值?它可能是零。

你可以检查这个答案:我认为这会解决你的问题。

What does "fatal error: unexpectedly found nil while unwrapping an Optional value" mean?

明确这个答案

https://stackoverflow.com/a/35683816/5660422

+0

phoneNumber不是零,它包含我想要使用的字符串 – AziCode

请使用电话://方案,并随时调用

UIApplication.sharedApplication().canOpenURL 

+0

我不想使用textLabel,因为它只是一个标题,我需要检索包含我想要使用的电话号码的detailTextLabel – AziCode

+1

请检查我的编辑 –