How to disable WAL journal mode

天大地大妈咪最大 提交于 2019-11-26 12:29:34

问题


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

I am having trouble in disabling journal mode.

My code is:

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;
}

How would I go about disabling journal mode WAL.

Thanks


回答1:


To disable WAL mode, set the journal_mode to DELETE

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]



回答2:


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.
}



回答3:


For Swift 2 it would be the following:

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


来源:https://stackoverflow.com/questions/20062197/how-to-disable-wal-journal-mode

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!