2012-01-20 26 views
5

Có ai biết điều gì sẽ xảy ra nếu bạn cố gắng lưu vào dữ liệu cốt lõi, nhưng không còn đủ dung lượng đĩa?iOS: Dữ liệu cốt lõi và không gian đĩa

Tôi giả sử thao tác lưu sẽ tạo NSError thuộc loại nào đó? Làm thế nào bạn sẽ nói nó là một lỗi không gian đĩa không phải là một số lỗi khác trong quá trình ghi đĩa?

Trả lời

0

Bạn có thể tìm ra lỗi bằng cách truy vấn cá thể NSError và phân tích cú pháp kết quả cho miền lỗi liên quan. Một trong những lĩnh vực có thể có mã lỗi mà bạn đang tìm kiếm:

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

Phải, tôi biết bạn có thể truy vấn mã lỗi. Tôi chủ yếu hỏi nếu ai đó có thể biết hoặc đã gặp phải điều này trước đây vì bạn không thể thực sự kiểm tra điều này trên trình mô phỏng, và phải lấp đầy thiết bị thực tế đến mức bạn biết dữ liệu cốt lõi tiếp theo sẽ tiết kiệm được dung lượng đĩa. – nsx241

+0

nsx241, các mã lỗi hàng đầu mà bạn có khả năng nhận được là: 'NSPersistentStoreSaveError',' NSPersistentStoreIncompleteSaveError' hoặc 'NSSQLiteError'. Tất nhiên, nếu bạn muốn chứng minh điều này, bạn phải điền vào một thiết bị. Một ứng dụng mẫu để làm như vậy với những hình ảnh lớn là bản vẽ đơn giản để viết. Andrew – adonoho

3

Sau một vài giờ cố gắng để lấp đầy đĩa, tôi đã phát hiện ra rằng các lỗi mà bạn nhận được là:

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

Rất khó để có lỗi này:

  • Thiết bị iOS yêu cầu đầy đủ trước khi thực sự xảy ra. Tôi quản lý để nén thêm 206MB vào một chiếc iPod tuyên bố có 0 byte miễn phí.
  • Khi thiết bị đầy, nó sẽ tự động bắt đầu xóa bộ đệm và các tệp tạm thời khác.
2

Điều này có vẻ là sự lựa chọn không tốt bởi các nhà phát triển CoreData khi triển khai API xử lý lỗi của họ. thay vì xác định một NSCoreDataErrorDomain chúng đang quá tải NSCocoaErrorDomain và chuyển các mã lỗi SQLite được định nghĩa here.

Các vấn đề liên quan