2011-02-14 73 views
2

因此,我可以访问iPhone/iPod应用程序(Objective-C)中的只读SQLite数据库,但是我正在编写一个新的应用程序,该应用程序将具有可写的数据库。显然,r/w文件必须位于用户可写目录中。我的问题是,应该在应用程序第一次启动时,是否应该随应用程序发运一个空数据库并将其复制到r/w位置,或者创建r/w数据库?iPhone应用程序数据库

+1

舰空一个封装资源,复制到文档文件夹在第一次运行。比运行(和维护)模式创建脚本便宜。 – 2011-02-14 16:39:12

回答

1

你可以做下去,但它会更容易(且不易出错)为您创建一个空数据库,把它放在你的包,然后做你的AppDelegate.m文件:

- (void)prepareDatabase 
{ 
    //add Database Versioning check to see if the resources database is newer 
    // generally as simple as naming your database with a version on the end 

    NSFileManager *filemanager = [NSFileManager defaultManager]; 
    NSString *databasePath = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0] stringByAppendingString:@"/YOURDATABASE.s3db"]; 
    if(![filemanager fileExistsAtPath:databasePath]) { 
     //Database doesn't exist yet, so we copy it from our resources 
     NSString *defaultDBPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingString:@"/YOURDATABASE.s3db"]; 
     if([filemanager copyItemAtPath:defaultDBPath toPath:databasePath error:nil]) { 
      NSLog(@"Database Copied from resources");   
     } else { 
      NSLog(@"Database copy FAILED from %@ to %@",defaultDBPath,databasePath); 
     } 
    } 
} 

然后在您的applicationDidFinishLaunching:方法调用此:

[self prepareDatabase]; 
+0

这是正确的(+1)。为了更加防弹,你可以复制到不同的文件名,然后重命名。这样,创建空数据库的最终操作就可以使用原子。 – 2011-02-14 17:50:07

相关问题