Objective-C:需要从FinishedLaunching调用另一个类中的方法

时间:2011-03-07 20:16:12

标签: objective-c

我到目前为止......这是我的代码:

- (void)applicationDidFinishLaunching:(UIApplication *)application
{
    //  create the d/b or get the connection value
    SQLiteDB *dbInstance = [[SQLiteDB alloc] init];
}

现在,问题是:这段代码应该检查数据库是否存在,如果不存在,则创建它。我的问题是我有一个问题,弄清楚究竟如何编写被调用方法的第一行以及将它放在SQLiteDB.m中的位置。这是实例方法( - )还是类方法(+)?

我很遗憾对此如此蹩脚,但是一旦我看到它,我将掌握它...其余的代码是用C#编写的,我可以处理转换为Obj_C。

2 个答案:

答案 0 :(得分:0)

我假设通过“查看数据库是否存在”,您的意思是“查看数据库文件是否存在于磁盘上”。为此,您使用类fileExistsAtPath:的方法NSFileManager。这是一个实例方法,但您可以使用[NSFileManager defaultIntance]

首先计算文件的路径(由您决定)。检查文件是否存在。如果是,请打开文件,否则,创建一个具有该文件名的新数据库。

答案 1 :(得分:0)

以下是将现有数据库从Bundle复制到Documents目录的方法,但可以轻松地适应新数据库。只需使用下面的fileExistsAtPath:方法逻辑,并替换要对自定义数据库创建代码执行的操作。

将它放在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];