Domanda

Sto sviluppando un'app che è attualmente sandbox. Agisce come un editor di testo di base. Di recente, volevo testare cosa succede quando apro un file nella mia app e un'altra app contemporaneamente, apportare un aggiornamento in una app, quindi vedere l'Aggiornamento nell'altra. sto usando Coda o BBEdit come i miei redattori alternativi. Se disattivo il sandboxing, questo problema non esiste. Tuttavia, poiché le app devono essere sandbox al 1 ° marzo, preferirei implementare una soluzione piuttosto che aspettare e vedere.

Quando apro entrambi i file e faccio una modifica nella mia app e poi passiamo all'altra app, le modifiche vengono riflesse in modo che quegli editori abbiano la versione appena salvata dalla mia app. Tuttavia, se eseguo il contrario di salvare dalla loro app e poi trasferirmi nella mia - nessuna gioia. Senza eseguire alcuna azione, la console riporta due errori specifici: deny file-issue-extension e deny file-write-data. L'app sembra perdere privilegi per modificare il documento poiché è stato modificato da un editor esterno dopo l'apertura del documento nella mia app. Se provo a salvare il file nella mia app, mi chiede di duplicare il documento perché ha perso l'accesso al documento originale. Ciò non accade dall'altra parte perché quelle app non sono state sandbox e quindi hanno autorizzazioni che la mia app non lo fa. Inoltre, non sembra impedire all'altra app di apportare le modifiche se non si desidera questo comportamento.

La documentazione su sviluppatore.apple.com non menziona nulla di questo tipo di situazione. Non sono sicuro che questo sia un comportamento previsto. In tal caso, posso solo dire al mio utente che le autorizzazioni del documento sono state perse e dovrebbero salvare una nuova versione o riaprire il file. Se non si tratta di un comportamento previsto, allora quale metodo nell'API NSDocument concederebbe l'autorizzazione al file una volta che è stato perso? Suppongo che la risposta sia la prima, che questo è previsto, ma qualcuno può confermare ed esiste una documentazione?

È stato utile?

Soluzione

Senza eseguire alcuna azione, la console riporta due errori specifici: nega l'estensione del problema e nega i dati del file-write. L'app sembra perdere privilegi per modificare il documento poiché è stato modificato da un editor esterno dopo l'apertura del documento nella mia app. Se provo a salvare il file nella mia app, mi chiede di duplicare il documento perché ha perso l'accesso al documento originale

Il comportamento corretto in una situazione come questa è non sovrascrivere il file, ma richiedere l'utente se desidera ricaricare il documento, se così ricaricarlo e quindi scriverlo.

Il sistema operativo sta facendo la cosa giusta non permettendo una scrittura cieca su un file che è cambiato.

Vedi NSFilePresenter - (void) Presentato EditemDidchange per vedere se è cambiato. Rileggi il file e quindi vedi se è possibile salvarlo. Non dici che ti è stato negato una lettura sul file.

Inoltre, poiché non hai pubblicato alcun codice, potrebbe essere utile mostrare quale codice stai utilizzando per accedere al file e salvarlo. NSDocument ha una gestione integrata per alcuni tipi di modifiche al file nella sandbox.

Altri suggerimenti

Chiamiamo la tua app Scottedit e il tuo concorrente come StackEdit

Potrebbero esserci diverse cose in corso. NSDocument ha un metodo LockDocument. StackEdit potrebbe aver bloccato il documento e non lo ha sbloccato dopo il salvataggio. Se si lascia l'app, il file dovrebbe essere sbloccato e disponibile per la tua app. In tal caso, dovrai creare una notifica per quando gli attributi del file cambiano usando Kqueue o un altro.

Se l'altra app sta "bloccando" l'accesso alla tua app. Puoi inviare un'e -mail a quello sviluppatore e chiedergli di aggiornare la sua app in modo che sblocca il documento dopo il salvataggio. Quest'ultimo passo si aggiunge alla creazione di notifiche perché un altro sviluppatore può venire e fare la stessa cosa (rompere la tua app).

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