【问题标题】:iOS: Core data and disk spaceiOS:核心数据和磁盘空间
【发布时间】:2012-01-20 22:10:45
【问题描述】:

有谁知道如果您尝试保存到核心数据但没有足够的磁盘空间会发生什么?

我假设保存操作会生成某种 NSError?您如何判断这是磁盘空间错误而不是磁盘写入期间的其他错误?

【问题讨论】:

    标签: ios cocoa-touch core-data


    【解决方案1】:

    在尝试填满磁盘几个小时后,我发现你得到的错误是:

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

    这个错误比较难得到:

    • iOS 设备在实际装满之前声称已装满。我设法将额外的 206MB 压缩到声称有 0 字节空闲的 iPod 上。
    • 当设备填满时,它会自动开始删除缓存和其他临时文件。

    【讨论】:

      【解决方案2】:

      CoreData 开发人员在实现他们的错误处理 API 时似乎是一个糟糕的选择。他们没有定义 NSCoreDataErrorDomain,而是重载了 NSCocoaErrorDomain 并传递了定义的 SQLite 错误代码 here.

      【讨论】:

        【解决方案3】:

        您可以通过查询 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,您可能收到的主要错误代码是:NSPersistentStoreSaveErrorNSPersistentStoreIncompleteSaveErrorNSSQLiteError。当然,如果你想证明这一点,你必须装满一个设备。使用大图像执行此操作的示例应用程序编写起来很简单。安德鲁
        猜你喜欢
        • 1970-01-01
        • 2019-12-12
        • 1970-01-01
        • 2020-07-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多