2012-01-20 12 views
5

Czy ktoś wie, co się stanie, jeśli spróbujesz zapisać w danych podstawowych, ale nie ma wystarczającej ilości miejsca na dysku?iOS: Podstawowe dane i przestrzeń dyskowa

Zakładam, że operacja składowania generuje pewien NSError jakiegoś rodzaju? Jak byś powiedział, że to błąd miejsca na dysku, a nie jakiś inny błąd podczas zapisu dysku?

Odpowiedz

0

Błąd można znaleźć, wysyłając zapytanie do instancji NSError i analizując wynik dla domeny błędu. Jedną z tych dziedzin ma prawdopodobnie kod błędu, którego szukasz:

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

Dobrze, wiem, że możesz zapytać o kod błędu. Pytałem głównie, czy ktoś może wiedzieć lub napotkał to wcześniej, ponieważ nie można tego naprawdę przetestować na symulatorze, i trzeba wypełnić rzeczywiste urządzenie do punktu, w którym wiesz, że kolejne podstawowe zapisy danych przejdą na miejsce na dysku. – nsx241

+0

nsx241, wiodącymi kodami błędu, które prawdopodobnie otrzymasz są: 'NSPersistentStoreSaveError',' NSPersistentStoreIncompleteSaveError' lub 'NSSQLiteError'. Oczywiście, jeśli chcesz to udowodnić, musisz wypełnić urządzenie. Przykładowa aplikacja do robienia dużych zdjęć jest łatwiejsza do napisania. Andrzej – adonoho

3

Po kilku godzinach próbując wypełnić dysku, znalazłem, że błąd można dostać się:

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

jest to raczej trudno dostać ten błąd:

  • urządzenia iOS domagać się całości przed jakimi są naprawdę. Udało mi się wycisnąć dodatkowe 206 MB na iPoda, który twierdził, że ma 0 bajtów za darmo.
  • Gdy urządzenie się zapełni, automatycznie rozpocznie usuwanie pamięci podręcznych i innych plików tymczasowych.
2

To wydaje się być kiepskim wyborem deweloperów CoreData podczas wdrażania ich API do obsługi błędów. zamiast definiować NSCoreDataErrorDomain, przeciążają NSCocoaErrorDomain i przekazują kody błędów SQLite zdefiniowane here.

Powiązane problemy