2015-11-17 2 views
1

Привет У меня проблема с rangeOfUnit() методом от NSCalendar. Я получаю значение NSNotFound, пока ожидаю значений в диапазоне < 4,6> (количество недель в одном месяце). Что действительно беспокоит меня, это зависит от платформы (не работает на iOS7). Ошибка была обнаружена, когда я изучал компонент CVCalendar. Я установил английский язык и григорианский календарь на своем iPhone 4S с iOS 7.1.1.rangeOfUnit возвращает `NSNotFound` в течение нескольких недель в месяц (ошибка iOS7)

// 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) 
+0

Что такое UICalendar? Вы имеете в виду NSCalendar? - И в чем разница между первым и последним диапазоном? –

+0

Простите, я имею в виду «NSCalendar» из фреймворка. – Szu

ответ

0

Вы можете использовать функцию availabilit y в Свифт 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)")