iOS:核心数据和磁盘空间

7

如果您试图保存到核心数据,但剩余的磁盘空间不足,会发生什么情况?

我认为保存操作将生成某种NSError吗?如何告诉它是磁盘空间错误而不是磁盘写入期间的其他错误?

3个回答

9

尝试填充磁盘几个小时后,我发现你会遇到以下错误:

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

获取这个错误相当困难:

  • iOS设备在真正满之前就会报告已经满了。我成功地将206MB压缩到一个声称没有空闲字节的iPod上。
  • 设备填满后,它会自动开始删除缓存和其他临时文件。

4

在实现其错误处理 API 时,CoreData 开发人员似乎做出了一个不好的选择。他们重载了 NSCocoaErrorDomain 并传递了在此处定义的 SQLite 错误码,而没有定义 NSCoreDataErrorDomain。

这里是 SQLite 错误码。


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;

我知道你可以查询错误代码。我主要是想问是否有人之前遇到过这种情况,因为你无法在模拟器上进行测试,必须填充实际设备直到您知道下一个核心数据保存将超过磁盘空间的程度。 - nsx241
nsx241,你可能会遇到的主要错误代码包括:NSPersistentStoreSaveErrorNSPersistentStoreIncompleteSaveErrorNSSQLiteError。当然,如果你想证明这一点,你必须填满一个设备。编写一个使用大型图像的示例应用程序非常简单。安德鲁 - adonoho

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接