首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何禁用WAL日志模式

如何禁用WAL日志模式
EN

Stack Overflow用户
提问于 2013-11-19 02:49:43
回答 3查看 8.9K关注 0票数 11

监督办/

我在禁用日记模式方面有问题。

我的代码是:

代码语言:javascript
复制
static NSManagedObjectContext *managedObjectContext(){
static NSManagedObjectContext *context = nil;
if (context != nil) {
    return context;
}

NSString * const NSSQLitePragmasOption;

NSSQLitePragmasOption : @{ @"journal_mode" : @"DELETE" };

@autoreleasepool {
    context = [[NSManagedObjectContext alloc] init];
    
    NSPersistentStoreCoordinator *coordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:managedObjectModel()];
    [context setPersistentStoreCoordinator:coordinator];
    
    NSString *STORE_TYPE = NSSQLiteStoreType;

    NSString *path = @"ExerciseDB";
    NSURL *url = [NSURL fileURLWithPath:[path stringByAppendingPathExtension:@"sqlite"]];
 
    NSError *error;
    NSPersistentStore *newStore = [coordinator addPersistentStoreWithType:STORE_TYPE configuration:nil URL:url options:NSSQLitePragmasOption error:&error];
    
    if (newStore == nil) {
        NSLog(@"Store Configuration Failure %@", ([error localizedDescription] != nil) ? [error localizedDescription] : @"Unknown Error");
    }
}
return context;
}

如何禁用日记模式WAL。

谢谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-11-19 21:13:05

若要禁用WAL模式,请将journal_mode设置为删除

代码语言:javascript
复制
NSMutableDictionary *pragmaOptions = [NSMutableDictionary dictionary];
[pragmaOptions setObject:@"DELETE" forKey:@"journal_mode"];

NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption, [NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption, pragmaOptions, NSSQLitePragmasOption, nil];
[_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:options error:&error]
票数 22
EN

Stack Overflow用户

发布于 2014-06-17 10:47:57

来自苹果技术文档:技术问答QA1809

代码语言:javascript
复制
NSDictionary *options = @{NSSQLitePragmasOption:@{@"journal_mode":@"DELETE"}};
if (! [persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType
                                            configuration:nil
                                            URL:storeURL
                                            options:options
                                            error:&error]) {
    // error handling.
}

编辑2020:

SwiftUI + iOS 14 (Xcode 12 beta 6)

使用SwiftUI创建新项目并检查CoreData模板时,新项目的Persistence.swift文件中有以下代码:

代码语言:javascript
复制
struct PersistenceController {
    static let shared = PersistenceController()

    //...

    let container: NSPersistentContainer

    init(inMemory: Bool = false) {
        container = NSPersistentContainer(name: "db_name")
        if inMemory {
            container.persistentStoreDescriptions.first!.url = URL(fileURLWithPath: "/dev/null")
        }
        container.loadPersistentStores(completionHandler: { (storeDescription, error) in
            if let error = error as NSError? {
                //...
                fatalError("Unresolved error \(error), \(error.userInfo)")
            }
        })
    }
}

现在,您可以在init容器(container = NSPersistentContainer(name: "db_name"))之后添加以下代码块

代码语言:javascript
复制
if let url = container.persistentStoreDescriptions.first?.url {
    let storeDescription = NSPersistentStoreDescription(url: url)
    storeDescription.setValue("DELETE" as NSObject, forPragmaNamed: "journal_mode")
    container.persistentStoreDescriptions = [storeDescription]
}
票数 14
EN

Stack Overflow用户

发布于 2016-08-27 15:48:07

对于Swift 2,其内容如下:

代码语言:javascript
复制
    let dict: [NSObject : AnyObject] = [
        NSSQLitePragmasOption: ["journal_mode":"DELETE"]
    ]

    do {
        try coordinator.addPersistentStoreWithType(NSSQLiteStoreType, configuration: nil, URL: url, options: dict)
    } catch {
        // Report any error we got.
        var dict = [String: AnyObject]()
        dict[NSLocalizedDescriptionKey] = "Failed to initialize the application's saved data"
        dict[NSLocalizedFailureReasonErrorKey] = failureReason

        dict[NSUnderlyingErrorKey] = error as! NSError
        let wrappedError = NSError(domain: "YOUR_ERROR_DOMAIN", code: 9999, userInfo: dict)
        // Replace this with code to handle the error appropriately.
        // abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development.
        NSLog("Unresolved error \(wrappedError), \(wrappedError.userInfo)")
        abort()
    }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20062197

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档