Я выпустил свое первое приложение в App Store 2 месяца назад, и до сих пор успех был превосходным. Однако недавно я обнаружил проблему.
Предпосылка приложения состоит в том, чтобы иметь возможность отслеживать отправленные и полученные конверты с деньгами. Это простое приложение, которое позволяет вам добавлять записи, а затем на панели вкладок отображает хронологическую шкалу времени с последующей фильтрацией только по имени, событию и году на других вкладках. Он хорошо работает по всему миру, за исключением случаев, когда вы меняете часовой пояс.
Приложение использует основные данные в фоновом режиме, включая некоторые NSPredicate
проверки, чтобы увидеть, «если этот год, который вы выбираете, уже существует, я верну его, а если нет, я создам новую запись для года». Таким образом, если у вас есть одна запись с 2014 г. и одна с 2013 г. в качестве лет, на вкладке «Год» вы увидите одну запись для 2014 г. и одну для 2013 г. Если вы добавите еще одну запись для 2014 г., вы не увидите двух записей 2014 г. вкладка года, но по-прежнему одна запись за 2014 год (со всеми транзакциями ниже).
Дата выбирается с помощью UIDatePicker
для получения фактической даты.
Проблема возникает при смене часовых поясов. Если вы сделаете это, запись с 2014 годом больше не будет распознаваться как та же запись, что и с предыдущим 2014 годом, и поэтому на вкладке года я получаю несколько записей 2014 года, что, конечно, не имеет смысла.
Я понял, что это связано со временем, и ниже вы можете видеть, что я не использую часовые пояса, а скорее использую функциональность NSGregorianCalendar
.
NSCalendar *yearCal = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *yearComponent = [yearCal components:NSYearCalendarUnit fromDate:self.datePicker.date];
NSDate *selectedYear = [yearCal dateFromComponents:yearComponent];
Не слишком сильно меняя функциональность приложения (я хочу, чтобы оно работало таким же образом), как мне указать часовой пояс, скажем, по Гринвичу, но из-за перехода на летнее время и т. д. я бы хотел, чтобы это было чем-то например, 12 часов дня по Гринвичу в качестве стандарта, поэтому независимо от того, где вы находитесь в мире, он будет сосредоточен на 12 часов дня по Гринвичу в это время.
Я надеюсь, что это имеет смысл, но любая помощь будет оценена по достоинству.
Спасибо,
NSDateFormatter * dateFormatter = [NSDateFormater new]; [dateFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT: 0]]
. Не уверен, что это правильное решение, но оно отлично работает для моих нужд. - person Mykola Denysyuk   schedule 16.02.2014