【问题标题】:rangeOfUnit returns `NSNotFound` for weeks in month (iOS7 bug)rangeOfUnit 在一个月的几周内返回 `NSNotFound`(iOS7 错误)
【发布时间】:2016-02-18 15:55:04
【问题描述】:

您好,我对来自NSCalendarrangeOfUnit() 方法有疑问。我得到 NSNotFound 值,而我期望值在 范围内(一个月中的周数)。真正让我担心的是它依赖于平台(在 iOS7 上不起作用)。在我调查CVCalendar 组件时发现了该错误。我在装有 iOS 7.1.1 的 iPhone 4S 上设置了英语语言和公历。

// Range of the month.
let range = calendar.rangeOfUnit(NSCalendarUnit.WeekOfMonth, inUnit: NSCalendarUnit.Month, forDate: date)
// Should return values in range <4,6>
print("Range \(range)")
let range2 = calendar.rangeOfUnit(NSCalendarUnit.Month, inUnit: NSCalendarUnit.WeekOfMonth, forDate: date)
// Invalid range. No week contains no months.
print("Range \(range2)")
let range3 = calendar.rangeOfUnit(NSCalendarUnit.Weekday, inUnit: NSCalendarUnit.Month, forDate: date)
print("Range \(range3)")

控制台打印日期:

po date
2015-11-17 10:05:39 +0000

iOS9 模拟器和其他非 iOS7 设备上的控制台输出:

Range (1,5)
Range (2147483647,2147483647)
Range (1,7)

iOS7 设备上的控制台输出:

Range (2147483647,2147483647)
Range (2147483647,2147483647)
Range (1,7)

【问题讨论】:

  • 什么是 UICalendar?你是说NSCalendar吗? – 第一个和最后一个范围有什么区别?
  • 对不起,我的意思是来自 Foundation 框架的 NSCalendar

标签: ios swift ios7 calendar


【解决方案1】:

您可以在 Swift 2 中使用可用性检查。

let weekOfMonthUnit: NSCalendarUnit
if #available(iOS 8, *) {
    weekOfMonthUnit = NSCalendarUnit.WeekOfMonth
} else {
    weekOfMonthUnit = NSCalendarUnit.NSWeekCalendarUnit
}
let range = calendar.rangeOfUnit(weekOfMonthUnit, inUnit: NSCalendarUnit.Month, forDate: date)
print("Range \(range)")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-16
    • 2011-09-06
    • 2013-11-26
    • 2021-04-15
    • 2011-09-29
    相关资源
    最近更新 更多