2012-01-20 11 views
5

Qualcuno sa cosa succede se si tenta di salvare i dati di base, ma non è rimasto abbastanza spazio sul disco?iOS: dati principali e spazio su disco

Suppongo che l'operazione di salvataggio generi un errore NSE di qualche tipo? Come diresti che si trattava di un errore di spazio su disco non di qualche altro errore durante la scrittura del disco?

risposta

0

È possibile rilevare l'errore effettuando una query sull'istanza NSError e analizzando il risultato per il dominio di errore interessato. Uno di questi domini probabilmente ha il codice di errore che si sta cercando:

// Predefined domain for errors from most AppKit and Foundation APIs. 
FOUNDATION_EXPORT NSString *const NSCocoaErrorDomain; 

// Other predefined domains; value of "code" will correspond to preexisting values in these domains. 
FOUNDATION_EXPORT NSString *const NSPOSIXErrorDomain; 
FOUNDATION_EXPORT NSString *const NSOSStatusErrorDomain; 
FOUNDATION_EXPORT NSString *const NSMachErrorDomain; 
+0

Giusto, so che puoi richiedere il codice di errore. Mi stavo chiedendo principalmente se qualcuno potesse saperlo o averlo già visto poiché non è possibile testarlo sul simulatore, e riempire un dispositivo reale fino al punto in cui si sa che i prossimi salvataggi di dati core andranno oltre lo spazio su disco. – nsx241

+0

nsx241, i principali codici di errore che è probabile ricevere sono: 'NSPersistentStoreSaveError',' NSPersistentStoreIncompleteSaveError' o 'NSSQLiteError'. Naturalmente, se vuoi dimostrarlo, devi riempire un dispositivo. Un'app di esempio per farlo con immagini di grandi dimensioni è più semplice da scrivere. Andrea – adonoho

3

Dopo qualche ora di cercare di riempire il disco, ho scoperto che l'errore che si ottiene è:

NSSQLiteErrorDomain = 13; 
NSUnderlyingException = "error during SQL execution : database or disk is full"; 

è piuttosto difficile ottenere questo errore:

  • dispositivi iOS sostengono di essere in pieno prima che realmente sono. Sono riuscito a spremere un ulteriore 206 MB su un iPod che affermava di avere 0 byte liberi.
  • Quando il dispositivo si riempie, inizia automaticamente a eliminare le cache e altri file temporanei.
2

Questa sembra essere una scelta sbagliata dagli sviluppatori CoreData quando implementa la loro API di gestione degli errori. invece di definire un NSCoreDataErrorDomain stanno sovraccaricando NSCocoaErrorDomain e passando i codici di errore SQLite definiti here.

Problemi correlati