Kal показывает 2 ячейки для одного и того же события - PullRequest
0 голосов
/ 30 марта 2011

Я создал приложение для iphone, которое использует платформу Kal в среде панели вкладок.

Я создаю новое событие, используя платформу EVENTKIT, и оно отображается для пользователя следующим образом: enter image description here

после нажатия кнопки «Готово» ... событие сохраняется ..

НО при просмотре календаря Кал показывает 2 записи для одного и того же события: enter image description here

IF Я закрываю приложение, затем открываю его снова, оно правильно показывает запись события в одной ячейке.

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

Кто-нибудь может помочь?

Редактировать: Когда я нажимаю кнопку "Сегодня", кажется, что сбросить / обновить данные, и он работает правильно.. В настоящее время я пытаюсь выяснить, как заставить его обновлять / сбрасывать каждый раз, когда добавляется событие ..

Любая помощь будет оценена :))

Ответы [ 2 ]

3 голосов
/ 22 июня 2011

Если ваш код основан на примере NativeCal, есть ошибка в

- (void)presentingDatesFrom:(NSDate *)fromDate to:(NSDate *)toDate delegate:(id<KalDataSourceCallbacks>)delegate

, потому что [events removeAllObjects] вызывается вверху функции, а затем повторно заполняется в dispatch_asyncблок, список событий может содержать повторяющиеся события, если функция вызывается снова до завершения первого вызова.Я исправил это, изменив вызов dispatch_async на dispatch_sync, чтобы заблокировать обратный вызов основного потока и очистить список событий в этом вызове, создав следующий код:

dispatch_async(eventStoreQueue, ^{
  NSDate *fetchProfilerStart = [NSDate date];
  NSPredicate *predicate = [eventStore predicateForEventsWithStartDate:fromDate endDate:toDate calendars:nil];
  NSArray *matchedEvents = [eventStore eventsMatchingPredicate:predicate];
  dispatch_sync(dispatch_get_main_queue(), ^{
    NSLog(@"Fetched %d events in %f seconds", [matchedEvents count], -1.f * [fetchProfilerStart timeIntervalSinceNow]);
    [events removeAllObjects];
    [events addObjectsFromArray:matchedEvents];
    [delegate loadedDataSource:self];
  });
});
0 голосов
/ 23 февраля 2013

Я озадачен вашим решением добавить события в календарь Кал. Я читал заголовочный файл и файл реализации KalDataSource.h и KalDataSource.m, и кажется, что весь код для создания события должен происходить там. В любом случае, вы могли бы рассказать мне, что вы делали, добавляя события в календарь кал?

...