【问题标题】:iOS 5.1: Getting "CoreData: error: (21)" on NSManagedObjectContext saveiOS 5.1:在 NSManagedObjectContext 保存时获取“CoreData:错误:(21)”
【发布时间】:2012-03-06 16:10:23
【问题描述】:

我收到了一个应用程序,它可以显示 PDF,并在关闭 PDF 时存储旋转角度和缩放状态。

我遇到的症状是在[NSManagedObjectContext save] 我得到:

CoreData:错误:(21) 数据库的 I/O 错误 db 路径 SQLite 错误代码:21,“无法打开数据库文件” 2012-03-06 09:58:40.227 Navtech iCharts[59838:fb03] 操作无法完成。 (Cocoa 错误 21。)

这只会在大约 225-250 次保存后发生。发生后,应用程序甚至无法打开.nib文件,从而导致:

'NSInternalInconsistencyException',原因:'无法在包中加载 NIB

我查阅了有关错误的sqlite文档,发现只有标题:

#define SQLITE_MISUSE      21   /* Library used incorrectly */

我什至不确定从哪里开始诊断。有谁知道是什么导致这种情况如此频繁地发生?


关于上下文,这里是执行保存的代码:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(managedObjectContextDidSave:) name:NSManagedObjectContextDidSaveNotification object:self.context];
NSError *err = nil;
@synchronized(self)
{
    if (![self.context save:&err])
    {
        NSLog(@"%@", [err localizedDescription]);
    }
}
[[NSNotificationCenter defaultCenter] removeObserver:self name:NSManagedObjectContextDidSaveNotification object:self.context];

【问题讨论】:

    标签: exception core-data ios5


    【解决方案1】:

    您可能用完了文件描述符。您是否(直接和/或间接)打开了很多文件?

    也看看this question

    【讨论】:

    • 我们直接打开了很多文件(不确定是否间接)。几百年前的错误发生。也许我们没有正确发布它们。我会看看。谢谢
    • 您应该尝试限制这一点。您可以打开的文件数量有硬性限制。
    • 我们一直在使用一堆fopens。我没有机会确定我们是否正确地发布了它们,因为另一位开发人员同时删除了带有流的fopens。这无疑为您的假设提供了很大的分量。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多