19

Tôi đang cố gắng sử dụng Mountain Lion NSUserNotificationCenter mới cho ứng dụng của tôi (thực tế không quá khó). Đăng thông báo hoạt động như một sự quyến rũ quaNSUserNotificationTrung tâm thông báo bỏ qua

NSUserNotification *userNotification = [[NSUserNotification alloc] init]; 
userNotification.title = @"Some title"; 
userNotification.informativeText = @"Some text"; 

[[NSUserNotificationCenter defaultUserNotificationCenter] deliverNotification:userNotification]; 

Tuy nhiên, tôi muốn loại bỏ tất cả thông báo trên màn hình khi ứng dụng tăng tiêu điểm. Ví dụ. giống như ứng dụng Tin nhắn mới. Khi nhận được tin nhắn mới trong nền, thông báo sẽ được hiển thị. Khi ứng dụng hoạt động trở lại, các ứng dụng này sẽ tự động bị loại bỏ và biến mất khỏi màn hình và từ Trung tâm thông báo.

Để nhân rộng điều này, tôi đã đăng ký một phương thức cho thông báo NSApplicationDidBecomeActiveNotification cũng được gọi là thành công. Trong đó tôi gọi [NSUserNotificationCenter defaultUserNotificationCenter] removeAllDeliveredNotifications].

Điều này, tuy nhiên, có tác dụng là thông báo đã được thu thập trong Trung tâm thông báo bị xóa trong khi "bong bóng" tương ứng được hiển thị ở góc trên cùng bên phải vẫn được hiển thị.

Lặp lại tất cả các thông báo đã gửi và tự xóa từng thông báo có cùng tác dụng chính xác, như đã sử dụng scheduleNotification thay vì deliverNotification.

Tôi có phải là người duy nhất gặp phải vấn đề này hay không, tôi có thiếu thứ gì đó để loại bỏ phần trên màn hình và phần Trung tâm thông báo của thông báo theo chương trình không?

+0

Có vẻ như bạn nên báo cáo điều này như một lỗi trên http://bugreport.apple.com. –

+0

Đã làm điều đó. Không ai ở Apple thực sự đọc chúng tôi đoán, nhưng chỉ vì mục đích hoàn thành. Không chắc chắn nếu tôi không bỏ lỡ một cái gì đó ở đây và đó là một lỗi về phía tôi mặc dù. – BinaryBucks

+0

Trong bối cảnh nào bạn đang sử dụng các thông báo, bạn có cần phải có 'bong bóng' không? –

Trả lời

17

Ứng dụng Tin nhắn có thể đang sử dụng phương thức NSUserNotificationCenter _removeAllDisplayedNotifications hoặc _removeDisplayedNotification: riêng tư.

Bạn có thể thử sử dụng các phương pháp này để kiểm tra xem đây có phải là những gì bạn đang tìm kiếm không. Chỉ cần thêm giao diện danh mục này để khai báo các phương thức:

@interface NSUserNotificationCenter (Private) 
- (void)_removeAllDisplayedNotifications; 
- (void)_removeDisplayedNotification:(NSUserNotification *)notification; 
@end 

Thật không may, vì đây là phương pháp không có giấy tờ, bạn không thể sử dụng chúng trong ứng dụng được phân phối qua App Store. Nếu đây thực sự là những gì bạn đang tìm kiếm, thì bạn nên file a bug và yêu cầu các phương thức này trở thành một phần của API công khai.

+0

Sử dụng các phương thức riêng tư này thực sự hiệu quả, cảm ơn bạn. Tôi không có đầu mối, tại sao các phương thức này không phải là một phần của API công khai tbh. Tôi sẽ gửi báo cáo lỗi cho nó. – BinaryBucks

3

Tính đến 10.9, các phương pháp sau để gỡ bỏ bất kỳ thông báo hiển thị:

// Clear a delivered notification from the notification center. If the 
// notification is not in the delivered list, nothing happens. 
- (void)removeDeliveredNotification:(NSUserNotification *)notification; 

// Clear all delivered notifications for this application from the 
// notification center. 
- (void)removeAllDeliveredNotifications; 

Các hành vi dường như đã thay đổi kể từ 10.8, như bất kỳ hiển thị thông báo bị loại bỏ cũng như khi các phương pháp này được gọi là (nhờ @ 0xced cho làm rõ).

+0

Bạn có chắc chắn chúng giống nhau không? ** Đã hiển thị ** so với ** được phân phối **. Ngày 10.8, việc triển khai của chúng không giống nhau. (Tôi chưa kiểm tra trên 10.9) – 0xced

+0

Ít nhất với bài kiểm tra tôi đã thực hiện vào ngày 10.9, hãy gọi '-removeAllDeliveredNotifications' đã xóa bất kỳ thông báo nào hiện được hiển thị. Tôi đoán đó không phải là hành vi trên 10.9. Chỉnh sửa để phản ánh điều đó, cảm ơn. –

1

removeDeliveredNotification đang xóa thông báo được hiển thị cho tôi (ngày 10.11), báo trước là identifier trên thông báo phải được đặt.

Các vấn đề liên quan