【问题标题】:Cannot cast NSString in Label.text无法在 Label.text 中转换 NSString
【发布时间】:2016-10-05 05:06:39
【问题描述】:

我一直试图在标签中显示从另一个视图控制器的单元格中检索到的值

这是细节视图控制器

var gg = NSDictionary()
    var siteName = NSString()

    override func viewDidLoad() {
        super.viewDidLoad()

        siteName = gg["SiteName"]! as! NSString
        print(siteName)

        self.siteNameDetail.text = siteName as String
    }

打印站点名称完美地给出了价值 但是当为 siteNameDetail.text 转换时会出现此错误

fatal error: unexpectedly found nil while unwrapping an Optional value

此 gg 是从母版页中检索到的

if (segue.identifier == "siteSegue"){
            let destview = segue.destinationViewController as! SiteViewController
            destview.gg = sender as! NSDictionary
        }

【问题讨论】:

    标签: swift nsstring nsdictionary


    【解决方案1】:

    该错误与标题中提到的类型转换无关。

    如果字典中不存在键 SiteName,则强制解包会导致应用崩溃。

    您必须使用可选绑定或 nil 合并运算符检查密钥。

    使用原生 Swift 类型(StringDictionary)。它使事情变得更容易。

    var gg = [String:AnyObject]()
    var siteName = ""
    
    override func viewDidLoad() {
        super.viewDidLoad()
        siteName = gg["SiteName"] as? String ?? ""
        print(siteName)
    
        self.siteNameDetail.text = siteName
    }
    

    PS:去掉像 if 条件周围的分号和括号这样的 ObjC 遗留物。

    【讨论】:

    • SiteName Exists 并且 print(siteName) 返回名称,但是当我尝试将它放在 siteNameDetail.text 中时,它给了我同样的错误尝试了你的方法,但仍然是同样的错误
    • 那么siteNameDetail 很可能是nil(未连接)。检查一下。
    • 谢谢!这就是问题所在。
    【解决方案2】:

    为什么要转换为 NSString?

        siteName = gg["SiteName"]! as! String
        self.siteNameDetail.text = siteName
    

    应该够了

    【讨论】:

    • 如果在两行之间打印siteName给出了一个好的字符串,那么一定是siteNameDetail没有正确连接,或者不是标签?
    【解决方案3】:

    在声明中

    self.siteNameDetail.text = siteName as String;  
    

    self 可能是 nil,self.setNameDetail 可能是 nil,siteName 可能是 nil,siteName as String 可能是 nil。您做了一些假设错误指的是哪一个。你的假设可能是错误的。

    【讨论】:

    • self 不能是nil
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-14
    • 1970-01-01
    • 1970-01-01
    • 2013-08-12
    相关资源
    最近更新 更多