【问题标题】:Can't unwrap Optional.None. i can't figure out how or what无法打开 Optional.None。我不知道如何或什么
【发布时间】:2014-06-09 17:01:43
【问题描述】:

我已经在 Stack Overflow 上查看了多个页面,但很难过。也许它的热量。不知道。无论如何,谁能帮我解释一下如何打开包装?

它在:

self.txt = dict.valueForKey("menuPunkt") as NSMutableArray!

在:

var dict1: NSMutableArray = NSMutableArray()
var txt: NSMutableArray = NSMutableArray()
var dict: NSDictionary = NSDictionary()

override func viewDidLoad() {
    super.viewDidLoad()
    let path = NSBundle.mainBundle().pathForResource("hovedMenu", ofType: "plist")
    self.dict = NSDictionary(contentsOfFile: path)
    self.txt = dict.valueForKey("menuPunkt") as NSMutableArray!
    self.tableView.registerClass(UITableViewCell.self, forCellReuseIdentifier: "cell")
}

更新

 let textArray = dict.valueForKey("menuPunkt") as? NSMutableArray
    if let textArray = dict.valueForKey("menuPunkt") as? NSMutableArray {
        self.txt = textArray
        println("txt\(txt)")
    } else {
        println("txt\(txt)")
    }

还是不行

【问题讨论】:

  • 我建议观看Intermmediate Swift WWDC 视频的前 20 分钟,我保证,它会为你解决所有问题!
  • 崩溃在哪一行?确切的错误信息是什么?
  • @AlexWayne 见上文编辑

标签: uitableview swift


【解决方案1】:

您的dict.valueForKey("menuPunkt") 返回一个可选的NSMutableArray,您将使用该行末尾的感叹号展开它。如果您更优雅地展开它,您可以处理dict 不包含"menuPunkt" 值的情况:

if let textArray = dict.valueForKey("menuPunkt") as? NSMutableArray {
    self.txt = textArray
} else {
    // give self.text some sort of default value
}

【讨论】:

  • 嗯,如果我使用你的代码,当我运行应用程序时它不会被读取?我需要在某处调用 if 语句还是使用 textArray 而不是 txt ?
  • 对不起,我有self.text 而不是self.txt。它没有被读取,因为hovedMenu.plist 没有"menuPunkt" 键的值。这就是为什么您之前也遇到错误的原因。检查您的 .plist 文件以确保它包含您要查找的内容。
  • 或者它可能根本没有找到 .plist 文件 - 在加载 NSDictionary 后立即尝试调试,并确保你得到了你所期望的。
  • 这是一个完全不同的问题! :)
【解决方案2】:

您收到该错误是因为您调用的方法正在返回nil。当你使用!使用该方法返回的可选变量(可以为 nil 的变量),您基本上是在断言该对象不是 nil。如果对象是 nil,你会得到一个运行时错误,就像你看到的那样

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-04
    • 2013-09-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多