2012-01-20 4 views
5

Кто-нибудь знает, что произойдет, если вы попытаетесь сохранить данные ядра, но осталось свободного места на диске?iOS: данные ядра и дисковое пространство

Я предполагаю, что операция сохранения генерирует некоторый NSError? Как бы вы сказали, что это была ошибка на диске, а не какая-то другая ошибка во время записи диска?

ответ

0

Вы можете узнать об ошибке, запросив экземпляр NSError и проанализировав результат для домена ошибки. Одна из этих областей, вероятно, имеет код ошибки, который вы ищете:

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

Правильно, я знаю, что вы можете запросить код ошибки. В основном я спрашивал, знает ли кто-нибудь об этом или когда-либо сталкивался с этим, так как вы не можете проверить это на симуляторе и должны заполнить фактическое устройство до того момента, когда вы узнаете, что последующие сохраненные данные ядра будут проходить через дисковое пространство. – nsx241

+0

nsx241, ведущими кодами ошибок, которые вы, скорее всего, получите, являются: 'NSPersistentStoreSaveError',' NSPersistentStoreIncompleteSaveError' или 'NSSQLiteError'. Конечно, если вы хотите это доказать, вам нужно заполнить устройство. Пример приложения, чтобы сделать это с большими изображениями, проще писать. Андрей – adonoho

3

После нескольких часов безуспешных попыток заполнить диск, я обнаружил, что ошибка, которую вы получаете:

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

Получить эту ошибку довольно сложно:

  • устройства iOS утверждают, что они полны, прежде чем они на самом деле. Мне удалось сжать дополнительный 206 МБ на iPod, который утверждал, что у него нет 0 байтов.
  • По мере того как устройство заполняется, оно автоматически начинает удалять кеши и другие временные файлы.
2

Это, по-видимому, плохой выбор разработчиками CoreData при реализации API обработки ошибок. вместо определения NSCoreDataErrorDomain они перегружают NSCocoaErrorDomain и передают коды ошибок SQLite, определенные here.