calendar.component 和无法识别的选择器发送到我的 iOS 应用中的实例错误 (Swift)
calendar.component and unrecognized selector sent to instance error in my iOS app (Swift)
我正在使用 Swift 构建一个 iOS 应用程序,其中,我有一个 UIWebView 调用 ViewController 以使其执行某些操作。
因此 ViewController 执行一系列操作,其中之一是确定它是星期几。使用以下代码,
let today = NSDate()
let calendar = NSCalendar(calendarIdentifier: NSGregorianCalendar)!
var components:Int = calendar.component(.WeekdayCalendarUnit, fromDate: today)
let oneDay = 60 * 60 * 24
let yesterday = today.dateByAddingTimeInterval(-(Double(oneDay)))
var yDayDay = calendar.component(.WeekdayCalendarUnit, fromDate: yesterday)
println("\(yDayDay)")
现在,这条线
var components:Int = calendar.component(.WeekdayCalendarUnit, fromDate: today)
抛出以下错误,
<NSInvalidArgumentException> -[_NSCopyOnWriteCalendarWrapper component:fromDate:]: unrecognized selector sent to instance 0x15e921d0
在设备上 运行 iOS 7.1。该代码在 iOS8 及更高版本上运行良好。所以我不明白是什么导致了 iOS 7.1 上的这个错误。我假设它也适用于 iOS7.
我试图用该方法实现的功能是确定星期几。所以现在我有一些东西可以在 iOS8 上工作,但不能在 iOS7.1 和更低版本上工作,我如何在两个 OS 上实现它。我想我不会得到答案,结果是,问题可能会被否决并关闭。不过我还是想试试none少
我会帮助您修复代码。第一个建议是使用 NSCalendarUnit 从任何 NSDate 类型的计算中减去一天、一周或一个月。
let yesterday = NSCalendar.currentCalendar().dateByAddingUnit(NSCalendarUnit.CalendarUnitDay, value: -1, toDate: NSDate(), options: nil)!
要找出星期几,您需要使用 NSDateFormatter:
let styler = NSDateFormatter()
styler.dateFormat = "EEEE"
let yesterDayOfWeek = styler.stringFromDate(yesterday)
println(yesterDayOfWeek) // "Sunday"
如果您需要一个 1-7 的整数来表示星期几,您必须执行以下操作:
let yesterDayOfWeekInt = NSCalendar.currentCalendar().components(NSCalendarUnit.CalendarUnitWeekday, fromDate: yesterday).weekday // 1
如果您需要一些参考来格式化您的日期,您可以使用这个:
我正在使用 Swift 构建一个 iOS 应用程序,其中,我有一个 UIWebView 调用 ViewController 以使其执行某些操作。
因此 ViewController 执行一系列操作,其中之一是确定它是星期几。使用以下代码,
let today = NSDate()
let calendar = NSCalendar(calendarIdentifier: NSGregorianCalendar)!
var components:Int = calendar.component(.WeekdayCalendarUnit, fromDate: today)
let oneDay = 60 * 60 * 24
let yesterday = today.dateByAddingTimeInterval(-(Double(oneDay)))
var yDayDay = calendar.component(.WeekdayCalendarUnit, fromDate: yesterday)
println("\(yDayDay)")
现在,这条线
var components:Int = calendar.component(.WeekdayCalendarUnit, fromDate: today)
抛出以下错误,
<NSInvalidArgumentException> -[_NSCopyOnWriteCalendarWrapper component:fromDate:]: unrecognized selector sent to instance 0x15e921d0
在设备上 运行 iOS 7.1。该代码在 iOS8 及更高版本上运行良好。所以我不明白是什么导致了 iOS 7.1 上的这个错误。我假设它也适用于 iOS7.
我试图用该方法实现的功能是确定星期几。所以现在我有一些东西可以在 iOS8 上工作,但不能在 iOS7.1 和更低版本上工作,我如何在两个 OS 上实现它。我想我不会得到答案,结果是,问题可能会被否决并关闭。不过我还是想试试none少
我会帮助您修复代码。第一个建议是使用 NSCalendarUnit 从任何 NSDate 类型的计算中减去一天、一周或一个月。
let yesterday = NSCalendar.currentCalendar().dateByAddingUnit(NSCalendarUnit.CalendarUnitDay, value: -1, toDate: NSDate(), options: nil)!
要找出星期几,您需要使用 NSDateFormatter:
let styler = NSDateFormatter()
styler.dateFormat = "EEEE"
let yesterDayOfWeek = styler.stringFromDate(yesterday)
println(yesterDayOfWeek) // "Sunday"
如果您需要一个 1-7 的整数来表示星期几,您必须执行以下操作:
let yesterDayOfWeekInt = NSCalendar.currentCalendar().components(NSCalendarUnit.CalendarUnitWeekday, fromDate: yesterday).weekday // 1
如果您需要一些参考来格式化您的日期,您可以使用这个: