我一直在爲iPhone寫這個應用程序,我需要使用sqlite。我已經預先加載了一堆數據,我將sqlite文件複製到我的項目文件夾中。當我啓動應用程序時,似乎sqlite數據文件未被複制到模擬器的應用程序文件(文檔位置)。這裏是我的代碼:不能複製sqlite文件到軟件包/應用程序,iPhone的資源
NSFileManager *fileManager = [NSFileManager defaultManager];
NSError *error;
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDir = [paths objectAtIndex:0];
NSString *dbPath = [documentsDir stringByAppendingPathComponent:@"moviedbl.data"];
BOOL success = [fileManager fileExistsAtPath:dbPath];
if(!success){
NSString *defaultDBPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent: @"moviedbl.data"];
//NSString *defaultDBPath = [[NSBundle mainBundle] pathForResource:@"moviedbl" ofType: @"data"];
success = [fileManager copyItemAtPath:defaultDBPath toPath:dbPath error:&error];
if(!success){
NSAssert1(0, @"Failed to create writable database file with message '%'.", [error localizedDescription]);
}
}
似乎defaultDBPath指的是在模擬器中的應用程序文件夾,這原本不包含任何sqlite的文件,而不是,其實是在等待一個sqlite的文件複製到它。根據我的理解,爲了複製文件,我們應該從我們的軟件包中獲取文件(不確定bundle是指我們的項目文件夾還是什麼,但我認爲它是我們的項目文件夾)並將其複製到我們的模擬器。我一直堅持這個好幾天,請賜教... Thankyou非常提前!
更新: 所以我實際上得到它的工作。起初我以爲這是因爲我沒有從mainBundle或其他東西拷貝文件,但事實證明,當我打開路徑中的.app的實際文件夾時,我做了。我看到它實際包含的數據庫。奇怪的是它沒有文件類型,但是在xCode中它將文件類型顯示爲「data」,所以我一直使用ofType:@「data」。所以最後我把它改爲ofType:@「」,它工作!無論如何!愚蠢的我,但感謝大家誰試圖幫助! :D
代碼似乎很好。 DB文件存在於你的資源和文件名是否正確? –
您是否通過將數據庫擴展名從moviedbl.data更改爲moviedbl.sqlite或moviedbl.sqlite3來進行檢查。 –
告訴我你的'dbPath'是什麼? – Krunal