2012-01-20 79 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设备声称在他们真的是充分之前。我设法将一个额外的206MB压缩到一个声称有0个字节的iPod上。
  • 随着设备填满,它会自动开始删除缓存和其他临时文件。
2

这似乎是CoreData开发人员在实现错误处理API时的糟糕选择。而不是定义NSCoreDataErrorDomain它们重载NSCocoaErrorDomain并传递SQLite错误代码定义here.