2010-11-21 14 views
10

W tym miejscu można to zrobić? Rejestruję mój obiekt na UIPasteboardChangedNotification w czasie uruchamiania, ale kiedy wysyłam go do tła i otwierając (na przykład) Safari i kopiuję jakiś tekst, mój przewodnik nie zostaje wywołany. (Używam teraz tylko symulatora).Odbieranie powiadomienia o tablicy UIPasteboard (generalPasteboard) w tle

Używałem zarówno:

[[NSNotificationCenter defaultCenter] addObserver:self 
    selector:@selector(pasteboardNotificationReceived:) 
    name:UIPasteboardChangedNotification 
    object:[UIPasteboard generalPasteboard]]; 

oraz:

[[NSNotificationCenter defaultCenter] addObserver:self 
    selector:@selector(pasteboardNotificationReceived:) 
    name:UIPasteboardChangedNotification 
    object:nil ]; 

aby zarejestrować obsługi.

+0

Czy kiedykolwiek się to rozwiązać? Próbuję też to osiągnąć. http://cl.ly/69a4 Jeśli znalazłeś odpowiedź, czy mogłabyś mi ją udostępnić? – Frankrockz

Odpowiedz

11

Miałem ten sam problem. Zgodnie z dokumentacją UIPasteboard Class Reference dla właściwości changeCount (podkreślenie moje):

Gdy zawartość zmienia się specyficznie kartonowych gdy przedmioty kartonowych są dodawane, modyfikowane lub usuwane-UIPasteboard przyrostów wartości tej nieruchomości. Po zwiększeniu liczby zmian UIPasteboard wysyła powiadomienia o nazwie UIPasteboardChangedNotification (dla dodatków i modyfikacji) oraz UIPasteboardRemovedNotification (dla przeprowadzek). ... Klasa aktualizuje także liczbę zmian , gdy aplikacja ponownie się uaktywni, a inna aplikacja zmieni zawartość spisu. Gdy użytkownicy zrestartują urządzenie, licznik zmian zostanie zresetowany do zera.

Przeczytałem to w ten sposób, że moja aplikacja otrzyma powiadomienie o UIPasteboardChangedNotification po ponownym uruchomieniu mojej aplikacji. Uważna lektura ujawnia jednak, że tylko aktualizacja changeCount jest aktualizowana po ponownym uruchomieniu aplikacji.

Zajmowałem się tym, śledząc plik changeCount w delegacji do mojej aplikacji i publikując oczekiwane powiadomienie, gdy stwierdziłem, że changeCount został zmieniony, gdy aplikacja była w tle.

W interfejsie App delegata:

NSUInteger pasteboardChangeCount_; 

A w realizacji App delegata:

- (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]]; 
    } 
} 
+0

To działa, ALE to rozwiązanie nie może monitorować powiadomienia, gdy aplikacja jest w tle, uruchamia się tylko wtedy, gdy reaktywujesz aplikację. –

Powiązane problemy