Swift 3.0无法获取所需的对象指针(替换为NULL):无法加载“self”,因为无法对其值进行评估

时间:2016-11-08 11:02:39

标签: ios iphone swift swift3 lldb

执行此代码时:

public enum Month : String {
    case January  = "JAN"
    case February = "FEB"
    case March = "MAR"
    case April = "APR"
    case May = "MAY"
    case June = "JUN"
    case July = "JUL"
    case August = "AUG"
    case September = "SEP"
    case October = "OCT"
    case November = "NOV"
    case December = "DEC"

    func toDate() -> Date {
        let dateFormatter = DateFormatter()
        dateFormatter.dateFormat = "dd.MMM.yyyy hh:mm a"
        let dateString = "01.\(self.rawValue).2016 12:00 PM"
        return dateFormatter.date(from: dateString)!
    }
}

我得到了:

  

致命错误:在解包可选值时意外发现nil

当我尝试打印“po dateFormatter.date(from:dateString)!”时发生崩溃的地方:

  

致命错误:在展开Optional值时意外发现nil   错误:警告:无法获取所需的对象指针(替换为NULL):无法加载'self',因为无法计算其值

     

错误:执行被中断,原因:EXC_BREAKPOINT(代码= 1,子代码= 0x100c551ec)。   该过程已返回到表达式评估之前的状态。

这只发生在运行iOS 10.1.1的iPhone 6上,并且没有发生在任何模拟器和运行iOS 9.x.x的设备上

任何人都知道最新情况以及“无法加载'自我'因为其价值无法评估”意味着什么。

我在一个只有这个代码的新项目中尝试过,我仍然可以重现错误。

即使是硬编码月份,没有自我部分也会出现同样的错误:

let dateString = "01.NOV.2016 12:00 PM"

更新

对于任何人来说,构建Date对象的正确方法是:

let calendar = Calendar.current
var components = DateComponents()
components.day = 1
components.month = month
components.year = year
components.hour = 12
components.minute = 00

let date = calendar.date(from: components)!

2 个答案:

答案 0 :(得分:0)

对于以后再来的人,只有月和年时构造Da​​te对象的正确方法是:

var components = DateComponents()
components.day = 1
components.month = month
components.year = year
components.hour = 12
components.minute = 00

let date = Calendar.current.date(from: components)

答案 1 :(得分:-2)

您的代码将在不到两个月的时间内提供完全错误的结果。如果用户的语言环境不是英语,它就会崩溃。