Я использую API EventKit для получения напоминаний пользователя. API выборки выполняется асинхронно, и когда выборка завершена, вы можете использовать блок завершения. Однако после того, как я получил напоминания пользователя, я назначаю их переменной экземпляра self.eventKitReminderEvents (я отладил и увидел, что это не ноль). Затем сразу после того, как я вызываю блок, но внутри этого блока self.eventKitReminderEvents имеет значение nil. Я не очень понимаю, почему это происходит. Может быть, кто-то может взглянуть на мой код и дать мне ключ.
Я использую API следующим образом:
- (void)futureReminders {
dispatch_semaphore_t sema = dispatch_semaphore_create(0);
[self fetchReminderEventsInBackgroundFromDate:[NSDate date] withCompletionBlock:^{
// When I enter here self.eventKitReminderEvents is nil
// Which is weird because it should be set already if you look in
// fetchReminderEventsInBackgroundFromDate below...
[self processEventKitRemindersWithCompletion:^(NSArray *reminderEvents) {
// Save a copy in memory
self.futureReminderEvents = reminderEvents;
// Send a signal that indicates that this asynchronous task is completed ...
dispatch_semaphore_signal(sema);
}];
}];
// Wait for dispatch signal
dispatch_semaphore_wait(sema, DISPATCH_TIME_FOREVER);
}
- (void)fetchReminderEventsInBackgroundFromDate:(NSDate *)startDate withCompletionBlock:(void(^)(void))block {
DLogName()
//NSDate *startDate = [NSDate date];
NSDate *endDate = [NSDate distantFuture]; // This will get me events 4 years from now
// Create the predicate
NSPredicate *predicate = [self.eventStore predicateForIncompleteRemindersWithDueDateStarting:startDate ending:endDate calendars:nil];
[self.eventStore fetchRemindersMatchingPredicate:predicate completion:^(NSArray *reminders) {
self.eventKitReminderEvents = reminders;
block();
}];
}
@property (nonatomic, strong) NSArray *eventKitReminderEvents;
- person Peter Warbo   schedule 13.02.2013@implementation { NSString *string; } @end
Сюда. - person Anoop Vaidya   schedule 13.02.2013