Xcode无法找到我的数据库的路径

时间:2013-01-16 21:49:09

标签: xcode

我现在正在搜索几个小时,但我找不到使用xcode for iOS app创建的数据库路径。数据库存在,导致它将数据加载到我的应用程序,但我找不到我的数据库的路径。即时通讯使用xcode 4.5和ios-simulator 6.0。

我在Xcode / contents / i下找到了一些文件夹,我搜索了我的数据库,但它没有成功^^。

那么它现在存储在哪里?

- (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);
        }
    }
}

1 个答案:

答案 0 :(得分:2)

您的数据库将存储在以下路径

/ Users / SystemName / Library / Application \ Support / iPhone \ Simulator / 6.1 / Applications / Application UniqueName / Documents \ databasename

Xcode与iPhone模拟器一起为您的应用程序的每个版本创建一个新的应用程序文件夹,并将旧文档文件夹及其内容移动到新的应用程序文件夹。您可以检查文档文件夹的内容,并确定您的Bundle中的文件是否适合用于文档文件夹中的文件。你应该明智而不是轻率地做出这个决定。

这是正确的行为。您的软件用户可能已对数据库进行了一些重大更改和修改。他们可能不喜欢它,如果在升级小错误修复或甚至功能增强时,他们的数据库更改,他们的高分,修改后的图像或任何您的应用程序保存,突然被替换为通用版本。

您应该做的是比较新数据库中的数据与用户拥有的数据,如果是SQLite,您应该将用户的条目导入或复制到新数据库中,然后您可以移动将新数据库移至文档文件夹,删除用户,但将其替换为包含用户数据和新数据的用户。

简而言之:确保不要使用捆绑包中的新数据库替换现有数据库,因为这样会破坏用户的更改。