CoreData: error: (14) I/O error for database

后端 未结 2 687
醉梦人生
醉梦人生 2021-01-02 11:17

When compiling and running in the XCode a project using Core Data I\'m getting an error I never saw before:

 2013-09-12 16:59:10.156 myapp[57811         


        
相关标签:
2条回答
  • 2021-01-02 11:58

    Now that the NDA on iOS7 has been lifted I can post for the sake of completion the workaround I found for this problem.

    The Core Data in iOS7 uses by default WAL in the sqlite.

    The only solution that did work was to create the sqlite using iOS6 simulator without WAL and import it in the project:

    - (NSPersistentStoreCoordinator *)persistentStoreCoordinator
    {
        static NSPersistentStoreCoordinator *psc;
        static dispatch_once_t onceToken;
        dispatch_once(&onceToken, ^{
            psc = [[NSPersistentStoreCoordinator alloc] 
                     initWithManagedObjectModel:self.managedObjectModel];
            NSURL *storeURL = [[NSBundle mainBundle] 
                      URLForResource:@"database" withExtension:@"sqlite"];
            [psc addPersistentStoreWithType:NSSQLiteStoreType
                              configuration:nil
                                        URL:storeURL
                                    options:@{NSReadOnlyPersistentStoreOption : @YES,
                                 NSSQLitePragmasOption: @{@"journal_mode":@"DELETE"}}
                                      error:NULL];
        });
        return psc;
    }
    
    0 讨论(0)
  • 2021-01-02 12:16
    NSURL *storeURL = [[NSBundle mainBundle] 
                         URLForResource:@"database" withExtension:@"sqlite"];
    

    builds a path inside the application bundle, which is read-only. The persistent store file needs to reside in a writable directory, e.g. the "Documents" directory.

    EDIT: The above answer is actually wrong, it is possible to open a read-only Core Data file from the application bundle (using NSReadOnlyPersistentStoreOption). The only thing I can currently imagine is that the bundled file is not a valid Core Data database. Adding the launch argument

    -com.apple.CoreData.SQLDebug 1
    

    might help to localize the problem.

    0 讨论(0)
提交回复
热议问题