在 Ray的教程中关于Core Data的第2篇文章中有一个问题一直没有被更新:在iOS 7下,如果你按照作者所述写完代码并运行,编译没有问题,但你会发现在最终结果的文件夹中不知有作者所说的4个文件,还有个xxxx.sqlit-wal 和 xxxx.sqlit-shm,然后用 SQLITE 的viewer 打开,数据库空一片片片。。。
那就解决吧,在 managedObjectContext() 函数中做如下更改:(21,22,23 行),然后运行,去文件夹中看看,现在只有一个xxxx.sqlite文件了!!!
static NSManagedObjectContext *managedObjectContext()
{
static NSManagedObjectContext *context = nil;
if (context != nil) {
return context;
}
@autoreleasepool {
context = [[NSManagedObjectContext alloc] init];
NSPersistentStoreCoordinator *coordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:managedObjectModel()];
[context setPersistentStoreCoordinator:coordinator];
NSString *STORE_TYPE = NSSQLiteStoreType;
NSString *path = [[NSProcessInfo processInfo] arguments][0];
path = [path stringByDeletingPathExtension];
NSURL *url = [NSURL fileURLWithPath:[path stringByAppendingPathExtension:@"sqlite"]];
NSError *error;
NSDictionary *dict = @{@"journal_mode":@"DELETE"};
NSDictionary *opts = @{NSSQLitePragmasOption:dict};
NSPersistentStore *newStore = [coordinator addPersistentStoreWithType:STORE_TYPE configuration:nil URL:url options:opts error:&error];
if (newStore == nil) {
NSLog(@"Store Configuration Failure %@", ([error localizedDescription] != nil) ? [error localizedDescription] : @"Unknown Error");
}
}
return context;
}
本文针对iOS使用CoreData时出现的SQLite数据库问题提供了解决方案。通过调整journal_mode设置为DELETE,确保数据库文件正常创建且仅包含所需文件,避免额外的SQLite WAL和SHM文件干扰。

被折叠的 条评论
为什么被折叠?



