2012-01-20 2 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 장치는 실제로 존재하기 전에 가득 차 있다고 주장합니다. 나는 무료로 0 바이트를 가지고 있다고 주장하는 아이팟에 여분의 206MB를 집어 넣을 수 있었다.
  • 장치가 가득 차면 캐시 및 기타 임시 파일 삭제가 자동으로 시작됩니다.
2

이것은 오류 처리 API를 구현할 때 CoreData 개발자가 잘못한 것 같습니다. NSCoreDataErrorDomain을 정의하는 대신 NSCocoaErrorDomain을 오버로드하고 정의 된 SQLite 오류 코드를 전달합니다. here.