2014-12-04 34 views
1

我写了一个函数,根据今天的日期得到下一个星期一的NSDate,但是当我尝试调用此函数时,我得到了一个runtime errorSwift:试图获取NSDate将来的日期时获取EXC_BAD_INSTRUCTION

我收到一个错误,指出:

主题1:EXC_BAD_INSTRUCTION在这条线(代码= EXC_I386_INVOP,子码=为0x0)

calendar?.locale = NSLocale.currentLocale() 

这是怎么回事??我需要采取哪些措施来解决这个问题?

func getNextMonday() -> NSDate { 
    let today = NSDate() 
    var calendar = NSCalendar(calendarIdentifier: NSGregorianCalendar) 
    calendar!.locale = NSLocale.currentLocale() 

    let components = calendar!.components(.YearCalendarUnit | .WeekOfYearCalendarUnit | .HourCalendarUnit | .MinuteCalendarUnit | .SecondCalendarUnit, fromDate: today) 
    components.weekday = 2 
    components.weekOfYear = components.weekOfYear + 1 
    components.hour = 8 
    components.minute = 0 
    components.second = 0 

    if let nextMonday = calendar?.dateFromComponents(components) { 
     return nextMonday 
    } 
    else { 
     return today 
    } 
} 
+0

你试过展开可选的日历'日程表.locale = ...'!? – Eimantas 2014-12-04 08:00:39

+0

@Eimantas/foreheadslap就是这样!让它成为答案,我可以接受!谢谢。 – 2014-12-04 08:02:47

+0

你确定这解决了这个问题吗? (我看不出这有什么不同。)在我看来,真正的错误是你应该使用.WeekOfYearCalendarUnit而不是.WeekCalendarUnit。 – 2014-12-04 08:10:34

回答

1

尝试展开可选calendar

calendar!.locale = NSLocale.currentLocale()