当我运行我的应用程序时,我无法执行数据库操作。当我检查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];
}
答案 0 :(得分:1)
在-init
中,您将自动释放的值分配给databasePath
。根据{{1}}的调用方式,-checkAndCopyDB
已经被释放,并且变量现在指向完全不同的东西。
您可以通过在databasePath
中保留databasePath
来处理此问题,但实际上没有理由将其保留在单独的方法中。我会将init
中与databasePath
相关的代码移至init
,这样可以正常工作并避免自动释放问题。