2013-01-16 68 views
1

即時搜索一些小時,但我無法找到我的數據庫創建的iOS應用程序的xcode的路徑。該數據庫存在,導致其將數據加載到我的應用程序,但我找不到我的數據庫的路徑。即時通訊使用Xcode 4.5和iOS模擬器6.0。Xcode無法找到我的數據庫的路徑

我發現一些文件夾下的Xcode /內容/我搜索我的數據庫,但它沒有成功^^。

那麼它現在存儲在哪裏?

- (void)createOrOpenDB { 
    NSArray *path = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *docPath = [path objectAtIndex:0]; 

    dbPathString = [docPath stringByAppendingPathComponent:@"WorkoutPlans.db"]; 

    char *error; 

    NSFileManager *fileManager = [NSFileManager defaultManager]; 

    //[fileManager removeItemAtPath:dbPathString error:nil]; 

    if(![fileManager fileExistsAtPath:dbPathString]) { 
     const char *dbPath = [dbPathString UTF8String]; 

     if (sqlite3_open(dbPath, &workoutPlansDB) == SQLITE_OK) { 
      const char *sql_cr_wp = "CREATE TABLE IF NOT EXISTS WORKOUTPLANS (ID INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL UNIQUE , NAME TEXT NOT NULL UNIQUE , DESCRIPTION TEXT NOT NULL UNIQUE)"; 
      const char *sql_cr_en = "CREATE TABLE IF NOT EXISTS ENTITY (ID INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL UNIQUE , NAME TEXT NOT NULL UNIQUE , DESCRIPTION TEXT NOT NULL UNIQUE)"; 
      const char *sql_cr_ex = "CREATE TABLE IF NOT EXISTS EXERCISE (ID INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL UNIQUE , NAME TEXT NOT NULL UNIQUE , DESCRIPTION TEXT NOT NULL UNIQUE , REPS TEXT NOT NULL , WEIGHT TEXT NOT NULL)"; 
      const char *sql_cr_plen = "CREATE TABLE IF NOT EXISTS WPEN (PLANID, ENID, FOREIGN KEY(PLANID) REFERENCES WORKOUTPLANS(ID) ON DELETE CASCADE, FOREIGN KEY(ENID) REFERENCES ENTITY(ID) ON DELETE CASCADE)"; 
      const char *sql_cr_enex = "CREATE TABLE IF NOT EXISTS ENEX (ENTITYID, EXERCISEID, FOREIGN KEY(ENTITYID) REFERENCES ENTITY(ID) ON DELETE CASCADE, FOREIGN KEY(EXERCISEID) REFERENCES EXERCISE(ID) ON DELETE CASCADE)"; 

      sqlite3_exec(workoutPlansDB, sql_cr_wp, NULL, NULL, &error); 
      sqlite3_exec(workoutPlansDB, sql_cr_ex, NULL, NULL, &error); 
      sqlite3_exec(workoutPlansDB, sql_cr_en, NULL, NULL, &error); 
      sqlite3_exec(workoutPlansDB, sql_cr_plen, NULL, NULL, &error); 
      sqlite3_exec(workoutPlansDB, sql_cr_enex, NULL, NULL, &error); 
      sqlite3_close(workoutPlansDB); 
     } 
    } 
} 

回答

2

你的數據庫將被存儲在以下路徑

/用戶/的SystemName /庫/應用程序的\ Support/iPhone \模擬器/ 6.1 /應用程序/應用UniqueName /文檔\數據庫名稱

的Xcode與iPhone Simulator一起,爲您的應用程序的每個版本創建一個新的應用程序文件夾,並將舊文檔文件夾及其內容移至新的應用程序文件夾。您需要檢查文檔文件夾的內容,並確定您的Bundle中的文件是否適合用於文檔文件夾中的文件。你應該明智而不是輕率地做出這個決定。

這是正確的行爲。您的軟件的用戶可能對數據庫做了一些重大更改和修改。他們可能不喜歡它,如果升級一個小錯誤修復程序或甚至功能增強功能時,它們的數據庫更改,高分,修改後的圖像或應用程序保存的任何內容突然被替換爲通用版本。

你應該做的是比較新數據庫中的數據與用戶所擁有的數據,而對於SQLite,應該將用戶的條目導入或複製到新的數據庫中,然後可以移動將新數據庫移至文檔文件夾,刪除用戶的數據庫,但將其替換爲具有用戶數據和新數據的數據庫。

簡而言之:確保您不會用您的套件中的新數據庫替換現有的數據庫,因爲這會吹掉用戶的更改。