iOS中關於讀取已存在的數據庫問題:路徑爲空的解決方法

        今天在作一個數據庫時遇到一個很奇葩的問題,導入一個db數據庫,個人思路是這樣的,由於若是要對數據庫進行操做,須要先把這個數據庫拷貝一份到沙盒中,可是當我用這個方法數據庫

NSString *backupDbPath = [[NSBundle mainBundle] pathForResource:@"ICD10" ofType:@"db"];

時,卻遇到很奇葩的問題,一直提示backupDbPath爲nil,找了一上午快被折磨瘋了,終於找到癥結所在,原來是蘋果搗的鬼,在拖入db文件到工程時,蘋果默認把add Target前面的勾給去掉了!!!致使不管如何也找不到咱們導入的db文件,so,解決方法就是:code

         把db文件從工程中刪除,而後從新拖進去,當彈出窗口時,彆着急着看都沒看就點next,把add Target前面的勾勾上,而後就會發現,真的好了!圖片

        問題很簡單,卻困擾了我好久,特記錄在此,須要勾上的不止copy item,還有add Target,警告本身時刻細心細心再細心,也但願能幫到遇到一樣問題的朋友。ip


        圖片好像沒有顯示出來,你們湊合着看吧。奉上個人一部分代碼:get

NSArray *searchPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory , NSUserDomainMask, YES);
        NSString *doc = [searchPaths objectAtIndex:0];
        NSString *dbFilePath = [doc stringByAppendingPathComponent:@"ICD10.db"];
        NSFileManager *fm = [NSFileManager defaultManager];
        BOOL isExist = [fm fileExistsAtPath:dbFilePath];
        if (!isExist) {
            //拷貝數據庫
            //NSString *backupDbPath =[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"ICD10.db"];
            NSString *backupDbPath = [[NSBundle mainBundle] pathForResource:@"ICD10" ofType:@"db"];
            NSError *error = [[NSError alloc] init];
            BOOL cp = [fm copyItemAtPath:backupDbPath toPath:dbFilePath error:&error];
            if (cp) {
                NSLog(@"數據庫拷貝成功");
            }else{
                NSLog(@"數據庫拷貝失敗: %@",[error localizedDescription]);
            }
        }
相關文章
相關標籤/搜索