Đây là kết quả của chính xác cách thông báo được gửi đi và nội dung thông báo thực sự được thông báo. Theo kinh nghiệm của tôi, bạn có thể mong đợi nhận được ít nhất một thông báo về thay đổi đối với một mục (sự kiện, lời nhắc, v.v.) và ít nhất một thông báo cho thay đổi kết quả cho lịch có chứa cho mục đó.
Nếu không nhìn thấy mã của bạn và biết những thay đổi đang được thực hiện, tôi không thể quá cụ thể về câu trả lời; tuy nhiên, nói chung, bạn có hai lựa chọn.
- Quan sát các thay đổi chặt chẽ hơn - có thể bạn bỏ qua một số thông báo nếu chúng liên quan đến các sự kiện không liên quan đến ứng dụng của bạn hoặc nếu bạn đã xử lý thay đổi cho một mục cụ thể.
- Hợp nhất nhiều thay đổi thành một chuỗi xử lý đơn lẻ. Về cơ bản, khi bạn nhận được thông báo, thay vì khởi động phản hồi của bạn ngay lập tức, hãy bắt đầu hẹn giờ sẽ chạy phản hồi sau một hoặc hai giây. Sau đó, nếu một thông báo khác xuất hiện trước khi bộ hẹn giờ kích hoạt, bạn có thể hủy bộ hẹn giờ và đặt lại. Bằng cách này, bạn có thể nhóm nhiều thông báo đến trong một cửa sổ thời gian ngắn và chỉ phản hồi lại chúng một lần (khi bộ đếm thời gian kết thúc).
Giải pháp thứ hai là câu trả lời ưa thích của tôi, và có thể giống như thế (tạm thời bỏ qua những lo ngại luồng):
@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");
}
Chỉ cần một cách nhanh chóng cảm ơn bạn, và thông tin phản hồi: với iOS 8.4.1 hành vi mà bạn nhận thấy (ít nhất 2 thông báo được kích hoạt cho mọi thay đổi) vẫn rất đúng và n của bạn. 2 giải pháp làm việc tuyệt vời cho tôi; Tôi không chắc chắn giải pháp n. 1 có thể được áp dụng cho EKEventStoreChangedNotification, mặc dù, vì những thông báo này không mô tả những thay đổi xảy ra với EKEventStore. Vì vậy, giải pháp n. 2 là con đường để đi! – cdf1982
Tôi gặp sự cố tương tự trên iOS9 –