Domanda

La mia app ha la condivisione dei file iTunes accesi e quando l'utente aggiunge un file in iTunes, dovrebbe essere in grado di rilevare.

La seguente funzione del delegato dell'applicazione viene utilizzata per essere chiamata ma non più:

- (void)applicationDidBecomeActive:(UIApplication *)application

Esiste una soluzione alternativa?

È stato utile?

Soluzione

C'è una soluzione: GCD. GCD ti consente di creare un dispatch_source_t Che osserva le modifiche a VNode, come una scrittura in una directory, quindi ti avvisa. Il base è: usa il open(path, O_EVTONLY) syscall per ottenere un descrittore di file alla directory, quindi chiama dispatch_source_create()e passare DISPATCH_SOURCE_TYPE_VNODE come tipo e DISPATCH_VNODE_WRITE come maschera. Imposta il gestore di eventi utilizzando dispatch_source_set_event_handler E fai tutto ciò che devi fare quando un file è scritto nella directory, inoltre si desidera anche impostare un gestore di cancellazione che chiama close() Per chiudere il descrittore di file. Infine, chiama dispatch_resume() per iniziare il monitoraggio.

Altri suggerimenti

È possibile archiviare un hash MD5 dall'ultimo file con cui l'app stava lavorando. Ogni volta che inizi la tua app, calcola un nuovo hash dal file che stai monitorando. Se l'hash è diverso da quello che hai archiviato prima, il file è stato modificato:

Ecco una soluzione per il calcolo degli hash del file MD5:Calcolo del file hash MD5

La domanda è ancora valida se invece di rilevare quando i file vengono aggiunti o rimossi da una cartella che si desidera sapere se qualunque Il file nella cartella monitorata è stato modificato. Non ho avuto alcun successo nel far funzionare questo con dispatch_vnode_write.

Sì, è vero che ricevo un evento Dispatch_vnode_write quando un file viene aggiunto, eliminato o rinominato nella cartella (anche se qui c'è un problema - per scoprire quale di questi 3 è successo dovrai prendere le istantanee del contenuto della cartella E confrontali - Yuck!). Ma se un file esistente dalla cartella viene modificato, non ottengo qualunque notifica. Ho provato anche Dispatch_Vnode_Extend e Dispatch_VNode_ATTRIB senza alcun successo. Questo fa schifo perché se hai una directory con centinaia o migliaia di file, come si suppone di scoprire se un file cambia?

Il carbonio deprecato Fsevents La libreria era più flessibile e potente dell'approccio della sorgente di spedizione GCD + IMO.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top