2012-10-29 1 views
0

Я пытаюсь сохранить напоминание в календаре. Он был сохранен, но с неправильной датой и временем.EKEvent не сохраняет напоминание в календаре ios

EDIT В принципе, я хочу сохранить напоминание в календаре с датой начала, выбранной из startDate picker и даты окончания, выбранной из набора endDate. и время, выбранное из списка напоминаний. Любая дата и время.

Ниже мой код. Что я делаю неправильно здесь

EKEvent *event = [EKEvent eventWithEventStore:eventStore]; 
event.title = productTextField.text; 

    [event setCalendar:[eventStore defaultCalendarForNewEvents]]; 

NSCalendar *calendar = [NSCalendar currentCalendar]; 
[calendar setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"GMT"]];//This is working 

NSDateComponents *components = [calendar components:(NSHourCalendarUnit | NSMinuteCalendarUnit) fromDate:[reminderTime getDate]]; 

NSInteger hour = [components hour]; 
NSInteger minute = [components minute]; 
NSDate *reminderDateAndTime = [NSDate dateWithTimeIntervalSince1970: [[startDate getDate] timeIntervalSince1970] + (minute * 60) + (hour * 60 * 60)]; 
NSDate *endDateAndTime = [NSDate dateWithTimeIntervalSince1970: [[endDate getDate] timeIntervalSince1970] ]; 
event.startDate = reminderDateAndTime; 

event.endDate = endDateAndTime; 

    [eventStore saveEvent:event span:EKSpanThisEvent error:&err]; 
+0

Это может помочь, если вы скажете, что вы получаете и чего ожидаете получить. – Abizern

+0

Похоже, вам нужен формат даты, но, пожалуйста, сообщите нам о вашем желаемом выходе. – Charan

+0

Отредактировал мой вопрос – Mann

ответ

4

В основном я хочу, чтобы сохранить напоминания в календаре с датой начала выбранной из STARTDATE подборщика и даты окончания выбранного из ENDDATE подборщика. и время, выбранное из списка напоминаний. Любая дата и время.

Вам не нужны 2 или 3 сборщика, вы можете использовать только один сборщик для всей этой операции.

Похоже, что выделение занимает много времени, когда вы используете 3 сборщика, один для даты начала, один для даты окончания и другие для времени, и что пользовательский интерфейс выглядит фанки.

Тогда почему вы используете dateWithTimeIntervalSince1970:. Он возвращает объект NSDate, установленный на заданное количество секунд с первого момента 1 января 1970 года по Гринвичу. Вам это не нужно.

Просто возьмите BOOL, например: BOOL dateValue

если DATEVALUE правда, получить дату начала и если оно ложно получить конечную дату.

Просто получить первую выбранную дату, как:

NSDate *startDate = [datePicker date]; 

Примечания: После выбора начальной даты, установите минимальную Дату вашего подборщика в качестве первой выбранной даты начала.

Тогда пользователь не может выбрать дату окончания до даты начала.

+0

Спасибо за ответ, но я тоже хочу добавить время. И дата окончания также напоминания – Mann

+0

Затем форматируйте дату вместе с временем. Ваш выбор даты также обеспечивает время вместе с датой, днем ​​и годом. вы можете проверить это -> http://www.unicode.org/reports/tr35/#Date_Format_Patterns – Charan

+0

Но как он будет реагировать на разные местоположения? – Mann

0

Я понял, что делаю неправильно. Ниже код работает отлично (код регистрации для других пользователей)

NSCalendar *calendar = [NSCalendar autoupdatingCurrentCalendar]; 


// Break the date up into components 
NSDateComponents *dateComponents = [calendar components:(NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit) 
               fromDate:[startDate getDate]]; 
NSDateComponents *timeComponents = [calendar components:(NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit) 
               fromDate:[reminderTime getDate]]; 

NSDateComponents *dateComponentsEnd = [calendar components:(NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit) 
               fromDate:[endDate getDate]]; 

[event setCalendar:[eventStore defaultCalendarForNewEvents]]; 

// Set up the fire time 
NSDateComponents *dateComps = [[NSDateComponents alloc] init]; 
[dateComps setDay:[dateComponents day]]; 
[dateComps setMonth:[dateComponents month]]; 
[dateComps setYear:[dateComponents year]]; 
[dateComps setHour:[timeComponents hour]]; 
// Notification will fire in one minute 
[dateComps setMinute:[timeComponents minute]]; 
[dateComps setSecond:[timeComponents second]]; 
NSDate *startDatee = [calendar dateFromComponents:dateComps]; 
NSDateComponents *dateCompsEnd = [[NSDateComponents alloc] init]; 
[dateCompsEnd setDay:[dateComponentsEnd day]]; 
[dateCompsEnd setMonth:[dateComponentsEnd month]]; 
[dateCompsEnd setYear:[dateComponentsEnd year]]; 
NSDate *endDatee = [calendar dateFromComponents:dateCompsEnd]; 
event.startDate=startDatee; 
event.endDate=endDatee; 
[eventStore saveEvent:event span:EKSpanThisEvent error:&err]; 
+0

Привет манн, у меня есть вопрос. Каковы ваши startDate, reminderTime и endDate? А event.startDate и event.endDate - относительная дата? не абсолютная дата? Благодаря! – iphoner

+0

startDate, endDate adn reminderTime - сборщики. и о event.startDate и событии.endDate, являющийся относительным или абсолютным, не получает ваше высказывание, испугавшись. Он сохранит дату в unixtimestamp – Mann

+0

Спасибо mann. Моя проблема в том, что когда я сохраняю напоминание, он сказал «Недействительные компоненты даты». У вас есть какие-то подсказки? Еще раз спасибо. – iphoner