Разница между NSCalendarUnitWeekOfYear и NSCalendarUnitWeekOfMonth

Я хочу повторять UILocalNotification каждую неделю, до iOS7 я бы использовал localNotification.repeatInterval = NSWeekCalendarUnit, за исключением того, что NSWeekCalendarUnit устарел.

Документы говорят:

«Используйте NSCalendarUnitWeekOfMonth или NSCalendarUnitWeekOfYear, в зависимости от того, что вы имеете в виду»

Но я не знаю, в чем разница, поэтому я не знаю, что я имею в виду.


person daihovey    schedule 12.03.2014    source источник


Ответы (2)


Похоже, что они не задокументированы, но, скорее всего, NSCalendarUnitWeekOfYear будет значением от 1 до 53 (или, может быть, 0-52), представляющим номер недели в календарном году, а NSCalendarUnitWeekOfMonth будет 1-5 (или, может быть, 0-4), представляющим неделя в месяце.

Все это предполагает григорианский календарь. Я не могу говорить с другими типами календарей.

Кажется, что NSCalendarUnitWeekOfMonth равно kCFCalendarUnitWeekOfMonth, которое определяется как «Указывает исходную неделю календарной единицы месяца». а NSCalendarUnitWeekOfYear равно kCFCalendarUnitWeekOfYear, которое определяется как «Указывает исходную неделю календарной единицы года».

person rmaddy    schedule 12.03.2014
comment
Но что на самом деле означает всего лишь неделю? Оба? Или мне просто взломать 7 * NSDayCalendarUnit? - person daihovey; 12.03.2014
comment
Какие данные вы пытаетесь получить? Другими словами, как вы пытаетесь использовать одно из этих значений? - person rmaddy; 12.03.2014
comment
Я пытаюсь заставить UILocalNotification повторяться каждую неделю. - person daihovey; 12.03.2014
comment
Было бы лучше обновить свой вопрос, показав, что вы пытаетесь сделать. Включите соответствующий код, показывающий, где вам нужно использовать одну из этих констант. Трудно помочь без контекста. - person rmaddy; 12.03.2014
comment
Предполагая, что вы хотите повторять каждую неделю года, я бы попробовал NSCalendarUnitWeekOfYear. - person rmaddy; 12.03.2014
comment
Но чем это отличается от NSCalendarUnitWeekOfMonth — будет ли оно повторяться каждую неделю в году? - person daihovey; 13.03.2014
comment
Честно говоря, я не знаю, как эти значения применяются к настройке локального уведомления. Мой ответ относился к вашему первоначальному вопросу, прежде чем вы упомянули, что он был для UILocalNotification. Документы Apple, похоже, нуждаются в обновлении в этом отношении. - person rmaddy; 13.03.2014
comment
Хорошо, спасибо - думаю, мне просто нужно подождать неделю, месяц и год, чтобы полностью отладить уведомление;) - person daihovey; 14.03.2014
comment
Разве использование этих двух не будет зависеть от порядкового номера? - person Sumit Gera; 28.03.2015

Что касается UILocalNotification

NSCalendarUnitWeekOfYear следует использовать как единицу для repeatInterval.

Когда я устанавливаю repeatInterval = NSCalendarUnitWeekOfMonth для уведомления, запланированного через 10 секунд, уведомление не срабатывает, а описание экземпляра UILocalNotification печатает .. next fire date = (null) ...

Если я использую NSCalendarUnitWeekOfYear, появляется уведомление, и я вижу правильную дату следующего запуска из кода в описании уведомления.

person zubko    schedule 28.08.2014
comment
Странно, у меня NSCalendarUnitWeekOfMonth какое-то время работало, но потом в какой-то момент сломалось. NSCalendarUnitWeekOfYear исправил ошибку. - person kas-kad; 09.12.2015
comment
NSCalendarUnitWeekOfYear повторяет уведомление каждую неделю? - person Supertecnoboff; 29.03.2016
comment
@Supertecnoboff NSCalendarUnitWeekOfYear - это просто константа. Если вы установите repeatInterval экземпляра UILocalNotification на эту константу, а затем запланируете это уведомление, и учитывая, что все другие необходимые настройки для локальных уведомлений выполнены успешно, уведомление будет повторяться один раз в неделю после его первоначального fireDate. - person zubko; 29.03.2016
comment
@zubko Отлично, спасибо. Да, я знал, что это константа (или перечисление), но, просматривая документацию для разработчиков, все, что я смог найти, это двухстрочное описание, которое, если честно, не очень помогло. - person Supertecnoboff; 29.03.2016