数据库文件未复制到文档目录中

时间:2011-03-24 16:28:59

标签: iphone sqlite

当我运行我的应用程序时,我无法执行数据库操作。当我检查iphone模拟器的文件目录时,它不包含db文件。这是我的代码

-(id)init
{
    [super init];

    databaseName=@"DSMDatabase.sqlite";

    NSArray * documentsPaths=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);

    NSString * documentDir=[documentsPaths objectAtIndex:0];

    databasePath=[documentDir stringByAppendingPathComponent:databaseName];

    return self;
}

-(void)checkAndCopyDB
{
    BOOL success;

    NSFileManager * fileManager=[NSFileManager defaultManager];

    success=[fileManager fileExistsAtPath:databasePath];

    if(success) return;

    NSString * databasepathfromapp=[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:databaseName];

    [fileManager copyItemAtPath:databasepathfromapp toPath:databasePath error:nil];

    [fileManager release];

}

1 个答案:

答案 0 :(得分:1)

-init中,您将自动释放的值分配给databasePath。根据{{​​1}}的调用方式,-checkAndCopyDB已经被释放,并且变量现在指向完全不同的东西。

您可以通过在databasePath中保留databasePath来处理此问题,但实际上没有理由将其保留在单独的方法中。我会将init中与databasePath相关的代码移至init,这样可以正常工作并避免自动释放问题。