Получение уведомления UIPasteboard (generalPasteboard) в фоновом режиме
Есть ли способ сделать это? Я зарегистрировал свой объект для UIPasteboardChangedNotification
во время запуска, но при отправке его в фоновый режим и открытии (например) Safari и копировании некоторого текста мой обработчик никогда не вызывается.
(Сейчас я использую только симулятор).
Я использовал оба:
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(pasteboardNotificationReceived:)
name:UIPasteboardChangedNotification
object:[UIPasteboard generalPasteboard]];
а также:
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(pasteboardNotificationReceived:)
name:UIPasteboardChangedNotification
object:nil ];
зарегистрировать мой обработчик.
1 ответ
У меня такая же проблема. Согласно Справочной документации по классу UIPasteboard для changeCount
собственность (акцент мой):
Всякий раз, когда изменяется содержимое монтажной панели, в частности, при добавлении, изменении или удалении элементов монтажной панели, UIPasteboard увеличивает значение этого свойства. После увеличения числа изменений UIPasteboard публикует уведомления с именами UIPasteboardChangedNotification (для дополнений и модификаций) и UIPasteboardRemovedNotification (для удалений).... Класс также обновляет счетчик изменений, когда приложение повторно активируется, а другое приложение изменило содержимое монтажной панели. Когда пользователи перезагружают устройство, счетчик изменений сбрасывается в ноль.
Я прочитал это, чтобы означать, что мое заявление получит UIPasteboardChangedNotification
уведомления, как только мое приложение было повторно активировано. Внимательное чтение показывает, однако, что это только changeCount
это обновляется, когда приложение повторно активировано.
Я справился с этим, отследив картон changeCount
в моем приложении делегата и размещения ожидаемого уведомления, когда я нахожу changeCount
был изменен, когда приложение было в фоновом режиме.
В интерфейсе делегата приложения:
NSUInteger pasteboardChangeCount_;
И в реализации делегата приложения:
- (BOOL)application:(UIApplication*)application
didFinishLaunchingWithOptions:(NSDictionary*)launchOptions {
[[NSNotificationCenter defaultCenter]
addObserver:self
selector:@selector(pasteboardChangedNotification:)
name:UIPasteboardChangedNotification
object:[UIPasteboard generalPasteboard]];
[[NSNotificationCenter defaultCenter]
addObserver:self
selector:@selector(pasteboardChangedNotification:)
name:UIPasteboardRemovedNotification
object:[UIPasteboard generalPasteboard]];
...
}
- (void)pasteboardChangedNotification:(NSNotification*)notification {
pasteboardChangeCount_ = [UIPasteboard generalPasteboard].changeCount;
}
- (void)applicationDidBecomeActive:(UIApplication*)application {
if (pasteboardChangeCount_ != [UIPasteboard generalPasteboard].changeCount) {
[[NSNotificationCenter defaultCenter]
postNotificationName:UIPasteboardChangedNotification
object:[UIPasteboard generalPasteboard]];
}
}