How to disable WAL journal mode

后端 未结 3 519
隐瞒了意图╮
隐瞒了意图╮ 2020-11-29 09:37

https://developer.apple.com/library/ios/releasenotes/DataManagement/WhatsNew_CoreData_iOS/

I am having trouble in disabling journal mode.

My code is:

3条回答
  •  广开言路
    2020-11-29 10:12

    From Apple Technical Documentation: Technical Q&A QA1809

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

    Edit 2020:

    SwiftUI + iOS 14 (Xcode 12 beta 6)

    When you create a new project with SwiftUI and check CoreData template, your new project has this code in Persistence.swift file:

    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)")
                }
            })
        }
    }
    

    Now, you can add the following block of code after init container (container = NSPersistentContainer(name: "db_name"))

    if let url = container.persistentStoreDescriptions.first?.url {
        let storeDescription = NSPersistentStoreDescription(url: url)
        storeDescription.setValue("DELETE" as NSObject, forPragmaNamed: "journal_mode")
        container.persistentStoreDescriptions = [storeDescription]
    }
    

提交回复
热议问题