2012-06-06 64 views
0

我一直在爲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

+0

代碼似乎很好。 DB文件存在於你的資源和文件名是否正確? –

+0

您是否通過將數據庫擴展名從moviedbl.data更改爲moviedbl.sqlite或moviedbl.sqlite3來進行檢查。 –

+0

告訴我你的'dbPath'是什麼? – Krunal

回答

1
NSFileManager *fileManager = [NSFileManager defaultManager]; 
NSError *error; 

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documentsDir = [paths objectAtIndex:0]; 

NSString *dbPath = [documentsDir stringByAppendingPathComponent:@"moviedbl.data"]; 

if([fileManager fileExistsAtPath:dbPath]==NO){ 

    NSString *defaultDBPath = [[NSBundle mainBundle] pathForResource:@"moviedbl" ofType: @"data"]; 
    BOOL success = [fileManager copyItemAtPath:defaultDBPath toPath:dbPath error:&error]; 

    if(!success){ 
     NSAssert1(0, @"Failed to create writable database file with message '%'.", [error localizedDescription]); 
    } 
} 
+0

我試過使用[NSBundle mainBundle] pathForResource:@「moviedbl」ofType:@「data」];但它返回零...你知道這是爲什麼嗎? – andy

+0

我很確定我的數據文件也保存在我的項目位置,而不僅僅是一個參考。 – andy

+0

我明白了! – andy

相關問題