如何在XCode中直接存储SQLite数据?

时间:2010-05-02 00:28:04

标签: iphone objective-c xcode sqlite

在这里搜索并得到一些模糊的答案,所以我想我会重新解释这个问题以获得更清晰的答案 -

现在我有一个SQL Lite数据库,它读取/解析预格式化的.txt文件中的信息。当我打开应用程序时,iDevice解析信息会有轻微的“滞后”,然后获取iDevice。我只是想知道是否有任何方法可以直接在xCode中“保存”所有信息,因此没有延迟/获取时间?

谢谢。

1 个答案:

答案 0 :(得分:0)

您可以做的是预先构建您的sqlite数据库,然后将其作为资源包含在您的应用程序中。由于此数据库位于您的应用程序包中,因此只能在您的设备上读取,因此您需要在应用程序文档区域中复制它。

我已成功在生产iPhone应用程序中使用类似以下代码的内容

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

NSString* dbFilePath = [documentFolderPath stringByAppendingPathComponent: DATABASE_FILE_NAME]; 


if(![[NSFileManager defaultManager] fileExistsAtPath: dbFilePath]) {
    // copy the template database into the right place
    NSError* error = nil;
    [[NSFileManager defaultManager] copyItemAtPath: [[NSBundle mainBundle] pathForResource: @"template" ofType: @"db"] toPath: dbFilePath error: &error];
    if(error) {
        @throw [NSException exceptionWithName: @"DB Error" reason: [error localizedDescription] userInfo: nil];
    }
}

int dbrc; // database return code
dbrc = sqlite3_open ([dbFilePath UTF8String], &db);
if(IS_SQL_ERROR(dbrc)) {
    @throw [NSException exceptionWithName: @"DB Error" reason: NSLocalizedString(@"Could not open database", @"Database open failed") userInfo: nil];
}