我在“支持文件”文件夹中有我的数据库的副本。我需要更新几个表,并且尝试使用方法来制作db的可写副本。

- (void) createEditableDatabase
{
   BOOL success;
   NSFileManager *fileManager = [NSFileManager defaultManager];
   NSError *error;
   NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);
   NSString *documentsDir = [paths objectAtIndex:0];
   NSString *writableDB = [documentsDir stringByAppendingPathComponent:@"yc_ch.db"];
   success = [fileManager fileExistsAtPath:writableDB];
   NSString *defaultPath = [[[NSBundle mainBundle]resourcePath]stringByAppendingPathComponent:@"yc_ch.db"];
   success = [fileManager copyItemAtPath:defaultPath toPath:writableDB error:&error];
   if (!success)
   {
    NSAssert1(0, @"Failed to create writable database file:'%@'.", [error localizedDescription]);
   }
}


我已经在根目录中创建(键入)了“ Documents”文件夹。目前,文档的层次结构如下所示:

 

当我运行我的应用程序时。我正在获取NSAssert1(0,@“无法创建可写数据库文件:'%@'。”,[错误localizedDescription]);。

它出什么问题了?

最佳答案

即使文件已经存在于文档中,您也可以复制文件,我认为NSFileManager copyFileAtPath:如果目标位置已经存在文件,则将返回NO,因此无法通过检查并引发NSAssert

success = [fileManager fileExistsAtPath:writableDB];
if (success)
{
    return;
}


因此,如果文档中已经存在该文件,则不会复制该文件。如果那是导致错误的原因,那么您是否可以实际发布断言,[error localizedDescription]至少会告诉您此刻出了什么问题。

编辑:

- (void) createEditableDatabase
{
   BOOL success;
   NSFileManager *fileManager = [NSFileManager defaultManager];
   NSError *error;
   NSString *writableDB = [[NSHomeDirectory() stringByAppendingPathComponent:@"Documents"] stringByAppendingPathComponent:@"yc_ch.db"];
   NSLog(@"Document path = %@", writableDB);
   success = [fileManager fileExistsAtPath:writableDB];
   if (success)
   {
       return;
   }
   NSString *defaultPath = [[NSBundle mainBundle] pathForResource:@"yc_ch" ofType:@"db"];
   NSLog(@"defaultPath = %@", defaultPath);
   error = nil;
   success = [fileManager copyItemAtPath:defaultPath toPath:writableDB error:&error];
   if (!success)
   {
       NSAssert1(0, @"Failed to create writable database file:%@", [error localizedDescription]);
   }
   if (error)
   {
        NSLog(@"error = %@", [error localizedDescription]);
   }
}

关于objective-c - 尝试制作sqlite的可写副本时出现错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8904851/

10-09 08:06