2013-09-23 8 views
5

Sto usando la protezione dei file mediante l'attributo NSFileProtectionKey come questo:di sicurezza del file quando il dispositivo è bloccato e sfondo recuperare in iOS7

[[NSFileManager defaultManager] setAttributes:@{NSFileProtectionKey : NSFileProtectionComplete} ofItemAtPath:coreDataFilePath error:NULL]; 

Quindi, nessun file in tale percorso può essere aperto quando il dispositivo è bloccato codice di accesso. Il problema è che dalle app iOS7 può essere eseguito in background anche quando il dispositivo è bloccato. Durante l'esecuzione del genere CoreData [NSManagedObjectContext save:] verrà effettuata con errore:

NSCocoaErrorDomain, 134030, The operation couldn’t be completed. (Cocoa error 134030.) { NSSQLiteErrorDomain = 23; NSUnderlyingException = "Updating max pk failed: authorization denied"; }

come gestire questo caso?

risposta

7

Per prima cosa, vedere la sessione 204 "Novità con il multitasking" dai video del WWDC 2013. Copre questo caso.

ci sono diversi approcci che si può prendere, in ordine di preferenza di sicurezza:

  • scrivere i dati in un'altra posizione (utilizzando NSFileProtectionCompleteUnlessOpen) fino a quando il dispositivo è sbloccato, quindi unire. Questo è generalmente l'approccio preferito.
  • Imposta il tuo database principale su NSFileProtectionCompleteUnlessOpen e tienilo aperto.
  • Impostare il database su NSFileProtectionCompleteUntilFirstUserAuthentication. Questo è generalmente l'approccio peggiore.
+0

Riguardo "Scrivi i dati in un'altra posizione (utilizzando NSFileProtectionCompleteUnlessOpen) finché il dispositivo non viene sbloccato, quindi unisci. Questo è generalmente l'approccio preferito." Come archiviare i dati che devono essere scritti nei dati principali fino a quando l'utente non decide di sbloccare il dispositivo. – user3687

+0

O scrivendo il formato di rete (spesso JSON). Oppure serializzare gli oggetti con NSCoding. In entrambi i casi, salvando in un file finché Core Data non viene sbloccato. –

+0

Il salvataggio di un file non elaborato su disco non comporta un ulteriore rischio per la sicurezza dell'applicazione. Ad ogni modo, hai qualche suggerimento su come rilevare se i dati di base sono sbloccati. – user3687

Problemi correlati