2013-01-16 42 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,应该将用户的条目导入或复制到新的数据库中,然后可以移动将新数据库移至文档文件夹,删除用户的数据库,但将其替换为具有用户数据和新数据的数据库。

简而言之:确保您不会用您的套件中的新数据库替换现有的数据库,因为这会吹掉用户的更改。