이것은 알림이 전달되는 방식과 실제로 알림이 전달되는 방식의 결과입니다. 내 경험에 따르면, 항목 (이벤트, 알림 등)에 대한 변경 사항 알림과 해당 항목에 대한 포함 캘린더의 결과 변경 사항에 대한 알림을 적어도 하나 이상받을 수 있습니다.
코드를 보지 않고 변경 내용을 알지 못해도 대답에 대해 너무 구체적 일 수는 없습니다. 그러나 일반적으로 두 가지 옵션이 있습니다.
- 변경 사항을 자세히 살펴보세요. 앱 관련 이벤트가 아닌 경우 또는 특정 항목에 대한 변경 사항을 이미 처리 한 경우 일부 알림을 무시해도됩니다.
- 여러 변경을 단일 처리기 코드 배치로 병합합니다. 기본적으로 알림을 받으면 즉시 응답을 시작하는 대신 2 ~ 2 초 안에 응답을 실행할 타이머를 시작하십시오. 그런 다음 타이머가 시작되기 전에 다른 알림이 수신되면 타이머를 취소하고 재설정 할 수 있습니다. 이렇게하면 짧은 시간에 들어오는 여러 알림을 일괄 처리하고 한 번만 응답 할 수 있습니다 (타이머가 결국 실행될 때).
후자의 솔루션은 나의 선호하는 대답이며, (일시적 스레딩 문제를 무시)과 같이 보일 수 있습니다
@property (strong) NSTimer *handlerTimer;
- (void)handleNotification:(NSNotification *)note {
// This is the function that gets called on EKEventStoreChangedNotifications
[self.handlerTimer invalidate];
self.handlerTimer = [NSTimer timerWithTimeInterval:2.0
target:self
selector:@selector(respond)
userInfo:nil
repeats:NO];
[[NSRunLoop mainRunLoop] addTimer:self.handlerTimer
forMode:NSDefaultRunLoopMode];
}
- (void)respond {
[self.handlerTimer invalidate];
NSLog(@"Here's where you actually respond to the event changes");
}
출처
2012-08-30 21:22:20
Tim
그냥 빨리 감사 및 피드백 : 아이폰 OS가 동작을 8.4.1로 알림 (모든 변경 사항에 대해 최소 2 건의 알림이 표시됨)은 여전히 매우 사실입니다. 2 해결책은 저를 위해 경이롭게 작동했습니다; 솔루션 n 확실하지 않습니다. 1은 EKEventStoreChangedNotification에 적용될 수 있습니다. 이러한 알림은 EKEventStore에 어떤 변경이 발생했는지 설명하지 않기 때문입니다. 그래서, 솔루션 n. 2가는 길입니다! – cdf1982
iOS9에서 같은 문제가 있습니다. –