你会把你的 SQLite 数据库文件放在 iPhone 应用程序的什么地方? [英] Where would you place your SQLite database file in an iPhone app?

查看:23
本文介绍了你会把你的 SQLite 数据库文件放在 iPhone 应用程序的什么地方?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

当我最初为我的应用程序创建一个带有预插入数据集的 SQLite 数据库文件时,我必须将此文件放在我的 Xcode 项目中的某个位置,以便它进入我的 iPhone 应用程序.我想资源"是正确的地方.

When I initially create an SQLite database file with pre-inserted datasets for my application, I would have to place this file somewhere in my Xcode project so that it goes to my iPhone application. I guess "ressources" is the right place for that.

在 iPhone 应用程序中部署 SQLite 数据库文件的基本步骤"是什么?

What are the basic "steps" for deployment of an SQLite database file in an iPhone application?

  • 手动创建数据库
  • 将数据库文件添加到项目中(在哪里?)

我目前正在阅读整个 SQLite 文档,尽管这与 iPhone 的关系不大.

I'm currently reading the whole SQLite documentation, although that's not much iPhone related.

推荐答案

您需要先将 SQLite 文件添加到您的 Xcode 项目中 - 最合适的位置是在资源文件夹中.

You need to add the SQLite file to your Xcode project first - the most appropriate place is in the resources folder.

然后在您的应用程序委托代码文件中,在 appDidFinishLaunching 方法中,您需要首先检查是否已经创建了 SQLite 文件的可写副本 - 即:已在用户文档中创建了 SQLite 文件的副本iPhone 文件系统上的文件夹.如果是,你什么都不做(否则你会用默认的 Xcode SQLite 副本覆盖它)

Then in your application delegate code file, in the appDidFinishLaunching method, you need to first check if a writable copy of the the SQLite file has already been created - ie: a copy of the SQLite file has been created in the users document folder on the iPhone's file system. If yes, you don't do anything (else you would overwrite it with the default Xcode SQLite copy)

如果不是,那么您将 SQLite 文件复制到那里 - 使其可写.

If no, then you copy the SQLite file there - to make it writable.

请参阅以下代码示例来执行此操作:这取自 Apple 的 SQLite 书籍代码示例,其中从应用程序委托 appDidFinishLaunching 方法调用此方法.

See the below code example to do this: this has been taken from Apple's SQLite books code sample where this method is called from the application delegates appDidFinishLaunching method.

// Creates a writable copy of the bundled default database in the application Documents directory.
- (void)createEditableCopyOfDatabaseIfNeeded {
    // First, test for existence.
    BOOL success;
    NSFileManager *fileManager = [NSFileManager defaultManager];
    NSError *error;
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    NSString *writableDBPath = [documentsDirectory stringByAppendingPathComponent:@"bookdb.sql"];
    success = [fileManager fileExistsAtPath:writableDBPath];
    if (success)
        return;
    // The writable database does not exist, so copy the default to the appropriate location.
    NSString *defaultDBPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"bookdb.sql"];
    success = [fileManager copyItemAtPath:defaultDBPath toPath:writableDBPath error:&error];
    if (!success) {
        NSAssert1(0, @"Failed to create writable database file with message '%@'.", [error localizedDescription]);
    }
}

============

============

这是 Swift 2.0+ 中的上述代码

Here's the above code in Swift 2.0+

// Creates a writable copy of the bundled default database in the application Documents directory.
private func createEditableCopyOfDatabaseIfNeeded() -> Void
{
    // First, test for existence.
    let fileManager: NSFileManager = NSFileManager.defaultManager();
    let paths:NSArray = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)
    let documentsDirectory:NSString = paths.objectAtIndex(0) as! NSString;
    let writableDBPath:String = documentsDirectory.stringByAppendingPathComponent("bookdb.sql");

    if (fileManager.fileExistsAtPath(writableDBPath) == true)
    {
        return
    }
    else // The writable database does not exist, so copy the default to the appropriate location.
    {
        let defaultDBPath = NSBundle.mainBundle().pathForResource("bookdb", ofType: "sql")!

        do
        {
            try fileManager.copyItemAtPath(defaultDBPath, toPath: writableDBPath)
        }
        catch let unknownError
        {
            print("Failed to create writable database file with unknown error: (unknownError)")
        }
    }
}

这篇关于你会把你的 SQLite 数据库文件放在 iPhone 应用程序的什么地方?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆