2014-04-17 57 views
1

我創建了一個新的核心數據項目並設置了我的核心數據模型。然後我在模擬器中運行它,然後保存上下文。然後我使用Core Data Editor 5打開並查看我的數據庫。我添加並編輯了新的權限,保存了該文件,然後我進入模擬器檢查它是否工作,並且所有內容都已添加並顯示正常。我現在想將這個數據庫添加到我的項目包中,並讓應用程序加載這個bata base作爲它的默認核心數據庫。隨着新的沃爾瑪系統,我似乎無法讓它工作。我想知道如果有人知道如何解決它。我聽說你必須添加所有3個文件(.sqlite,wal,shm),但我不知道在哪裏保存它或通過什麼過程來完成它。如何將預先存在的sqlite文件導入核心數據iOS 7.1

回答

2

將所有三項添加到您的iOS應用程序作爲資源。然後

NSURL *storeURL = [NSURL fileURLWithPath: [[NSBundle mainBundle] pathForResource:@"myfilename" ofType:@"myfileextension"]]; 

,並傳遞給你的NSPersistentStoreCoordinator在調用-addPersistentStoreWithType:configuration:...

- (NSPersistentStoreCoordinator *)persistentStoreCoordinator 
{ 
    if (_persistentStoreCoordinator != nil) { 
     return _persistentStoreCoordinator; 
    } 

    NSURL *storeURL = [NSURL fileURLWithPath: [[NSBundle mainBundle] pathForResource:@"myfilename" ofType:@"myfileextension"]]; 

    NSError *error = nil; 
    _persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]]; 
    if (![_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType 
                configuration:nil 
                  URL:storeURL 
                 options:@{NSReadOnlyPersistentStoreOption : @YES, 
                    NSSQLitePragmasOption: @{ @"journal_mode" : @"WAL"}} 
                  error:&error]) { 
     /* 
     Replace this implementation with code to handle the error appropriately. 
     */ 

     NSLog(@"Unresolved error %@, %@", error, [error userInfo]); 
     abort(); 
    } 

    return _persistentStoreCoordinator; 
} 

雖然給了你這個片段,但那不是我這樣做的方式,我不知道它會起作用。相反,如果我創建一個靜態數據存儲以用作只讀數據,那麼在創建數據存儲時(在另一個工具或程序中)以及在我的實際iOS應用程序中讀取數據存儲時,我會使用舊日記模式。這意味着更改options:參數(在創建代碼和讀取代碼上)。

   options:@{NSReadOnlyPersistentStoreOption : @YES, 
         NSSQLitePragmasOption: @{ @"journal_mode" : @"DELETE"}} 

http://www.sqlite.org/draft/wal.html「無法打開只讀WAL數據庫」。在http://www.sqlite.org/draft/wal.html#readonly進一步討論。

相關問題