0

我对 iOS 开发很陌生,绝对不完全理解这些Xcode东西的工作原理。我正在创建一个 iOS 应用程序,并一直在使用Sqlite在设备上存储数据。我在项目中添加了一个sqlite3数据库,但我注意到在模拟器中,该数据库在应用程序首次运行时不存在,因此必须在代码中创建。直到现在还可以。我应该有一个包含应用程序应附带的日期的列表。是否可以让应用程序在第一次运行时使用已经包含一些数据的数据库?

4

2 回答 2

1

那是因为 sqlite 文件在你的包中。

您需要在 applicationDidFinishLaunching 之后将其移动到库文件夹(或 Documents 文件夹)。

结帐 NSFileManager 了解更多信息...

于 2013-07-02T06:38:04.683 回答
1
// 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]);
    }
}

这是在 sqlite 数据库不存在时复制它..

希望这可以帮助。

于 2013-07-02T06:49:51.057 回答