2014-08-30 2 views
2

Я пытаюсь воспроизвести некоторые функциональные возможности часов по умолчанию, когда я разрешаю пользователям выбирать частоту повторения для сигнала тревоги. Проблема в том, что различные настройки NSCalendar будут давать вам разные имена для дней недели. Как сохранить выбранные дни недели таким образом, чтобы, если пользователь меняет календарь, частота всегда выпадает в правый день недели?Лучший способ сохранить день недели с помощью NSDate и NSDateFormatter

+0

Предполагая, что вы придерживаетесь 7-дневного григорианского календаря, просто сохраните числовое значение для дня недели. –

+0

@HotLicks проблема в том, что я не могу придерживаться одного календаря. Я не могу надежно предсказать, какие настройки у людей будут. – InkGolem

+0

Если вы даже не можете принять григорианский календарь (т. Е. Вы даже не знаете, является ли это 7-дневной неделей), я не знаю, как вы можете ожидать, чтобы сохранить выбранный день недели. –

ответ

1

Одним из решений было бы проверить, изменился ли календарь каждый раз, когда приложение выходит на передний план, и если да, внесите соответствующие изменения. Наверное, это не самое элегантное решение, ни лучшая практика, но он мог бы выполнить эту работу.

-2

Возьмите (long) [dateYouWantToRemember timeIntervalSince1970] и сохраните это в файле недвижимости или в таком виде. (Вы можете использовать timeIntervalSinceReferenceDate, но номер 1970 года - это «дата в эпоху UNIX» и более стандартизован - вы можете найти конвертеры онлайн, чтобы проверить его.)

Позже, под (потенциально) разным календарем, сделайте [NSDate dateWithTimeIntervalSince1970:theLongYouStored], и вы восстановит дату в новом календаре.

Теперь используйте NSCalendar/NSDateComponents, чтобы узнать новый порядковый день недели этой даты и используйте [NSDateFormatter weekdaySymbols], чтобы получить список названий дней недели. Индексируйте список с порядковым номером, чтобы получить новое имя дня. Используйте NSDateComponents для выполнения арифметических действий по датам, чтобы выбрать следующую дату в тот день недели, если это необходимо для вашего приложения.

+0

(К будущим читателям: этот ответ был просто опущен из-за злобы, и указанный нисходящий поток не является отражением превосходного совета, содержащегося в ответе). –

Смежные вопросы