2014-09-30 1 views
6

NSDateComponentsweek устарел с iOS8. Apple предлагает использовать weekOfMonth или weekOfYear вместо этого, в зависимости от контекста, но они работают по-другому. Например:NSDateComponents неделя работает по-разному на iOS8

components1 = [calendar components:NSMonthCalendarUnit | NSWeekCalendarUnit | NSDayCalendarUnit 
          fromDate:[self date7DaysAgo] 
          toDate:[NSDate date] 
          options:0]; 

деталей1 возвращает месяц = ​​0, неделя = 1, день = 0 и weekOfMonthweekOfYear оба равны (целое 2147483647 максимального значения).

components2 = [calendar components:NSMonthCalendarUnit | NSWeekCalendarUnit | NSDayCalendarUnit 
          fromDate:[self date30DaysAgo] 
          toDate:[NSDate date] 
          options:0]; 

components2 возвращает месяц = ​​1 (я знаю, что это зависит, но его просто пример), неделя = 0, день = 0, weekOfMonthweekOfYear и оба равны 2147483647 (целое максимальное значение).

Week возвращает количество недель в течение некоторого периода (если это была неделя или несколько), и это полностью отличается от числа недель в месяце или году. Почему Apple предложила использовать это вместо этого?

+0

Что такое метод date7DaysAgo и date30DaysAgo? – Apurv

+0

Дата 7 или 30 дней назад. Это может быть, например: '[[Дата NSDate] dateByAddingTimeInterval: -60 * 60 * 24 * 7] (Я знаю, что из-за летнего времени или чего-то другого он может отличаться, но опять же, это просто пример). – KlimczakM

+1

Если вы действительно хотите посмотреть документацию, NSWeekCalendarUnit «Устарел в iOS 8.0». (Впрочем, странно, так же как и все остальные единицы.) –

ответ

6

Использовать NSWeekOfMonthCalendarUnit или NSWeekOfYearCalendarUnit вместо NSWeekCalendarUnit.

+0

Мой плохой. Я думал, что он работает по-разному на iOS8, но weekOfYear будет выполнять эту работу здесь. – KlimczakM

+0

Те, которые устарели в 8. (И удачи в поиске замен в документации Apple.) –