【发布时间】: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];
【问题讨论】: