2010-11-21 12 views
10

C'è un modo per farlo? Registro il mio oggetto per UIPasteboardChangedNotification al momento dell'avvio, ma quando lo invio sullo sfondo e l'apertura (ad esempio) Safari e la copia di un testo, il mio gestore non viene mai chiamato. (sto usando solo il simulatore per ora).Ricezione notifica UIPasteboard (generalPasteboard) mentre sullo sfondo

Ho usato sia:

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

e:

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

a registrare il mio gestore.

+0

Hai mai ottenere questo risolto? Sto anche cercando di farlo. http://cl.ly/69a4 Se hai trovato la risposta, ti dispiacerebbe condividerlo con me? – Frankrockz

risposta

11

Ho avuto lo stesso problema. Secondo la documentazione UIPasteboard Class Reference per la proprietà changeCount (corsivo è mio):

Ogni volta che il contenuto di un cambiamento-specifico di cartone, quando vengono aggiunti elementi di cartone, modificate o rimosse-UIPasteboard incrementa il valore di questa proprietà. Dopo aver incrementato il conteggio delle modifiche, UIPasteboard pubblica le notifiche denominate UIPasteboardChangedNotification (per aggiunte e modifiche) e UIPasteboardRemovedNotification (per le rimozioni). ... La classe aggiorna anche il conteggio delle modifiche quando un'applicazione si riattiva e un'altra applicazione ha modificato il contenuto del cartone. Quando gli utenti riavviano un dispositivo, il conteggio delle modifiche viene reimpostato su zero.

avevo letto questo significa che la mia domanda avrebbe ricevuto UIPasteboardChangedNotification notifiche una volta la mia applicazione è stata riattivata. Un'attenta lettura rivela, tuttavia, che è solo lo changeCount che viene aggiornato quando l'app viene riattivata.

Mi sono occupato del tracciamento del numero di cartone changeCount nella delegata della app e di aver pubblicato la notifica prevista quando ho trovato che lo changeCount è stato modificato mentre l'app era in background.

Nell'interfaccia l'applicazione del delegato:

NSUInteger pasteboardChangeCount_; 

E nella realizzazione dell'app del delegato:

- (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

Funziona MA questa soluzione non può monitorare la notifica durante la tua app è in background, si attiva solo quando riattivi la tua app. –

Problemi correlati