2012-01-27 42 views
0

所以我有一个数据库的应用程序。这个数据库位于主包中。但是,我需要删除这个数据库,并从互联网上获得新的数据库。据我了解,我不能删除捆绑任何东西,并添加新的东西,所以我需要处理设备文档目录。但是我不知道如何使第一个数据库在文件目录下而不从网上下载。谁能帮忙?设备目录

回答

0

文档目录的路径,并需要将您的数据库文件放在那里。您需要从应用程序文档目录中复制的数据库中对应用程序执行所有读取/写入操作。

我使用这些方法在文件目录下创建我的数据库的副本: 你只需要调用这个方法:

+(BOOL)copyDBFileToDocumentsDirectory:(NSString*)dbFilename overwrite:(BOOL)yesNO 

,只是需要通过文件名以扩展。

+(NSString*)databaseABSPath:(NSString*)databaseName existsInDocumentsDirectory:(BOOL)existenceStatus 
{ 
    BOOL success = NO; 

    NSString *databasePath = nil; 

    if(existenceStatus)//documents Directory 
    { 
     NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
     NSString *documentsDir = [documentPaths objectAtIndex:0]; 
     databasePath = [documentsDir stringByAppendingPathComponent:databaseName]; 
    } 
    else //from bundle 
    { 
     NSArray *resourceSeparatedByExtension = [databaseName componentsSeparatedByString:@"."]; 

     if([resourceSeparatedByExtension count]<2) 
     { 
      NSLog(@"Problem with database name or extension"); 
      return nil; 
     } 

     databasePath = [[NSBundle mainBundle] pathForResource:[resourceSeparatedByExtension objectAtIndex:0] ofType:[resourceSeparatedByExtension objectAtIndex:1]]; 
    } 

    NSFileManager *fileManager = [NSFileManager defaultManager]; 

    success = [fileManager fileExistsAtPath:databasePath]; 

    if(!success) 
    { 
     NSLog(@"Database file does not exist at path"); 
     return nil; 
    } 
    else 
    { 
     return databasePath; 
    } 


} 

+(BOOL)copyDBFileToDocumentsDirectory:(NSString*)dbFilename overwrite:(BOOL)yesNO 
{ 
    NSString *filePath = [mySQLiteDb databaseABSPath:dbFilename existsInDocumentsDirectory:NO]; 

    NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsDir = [documentPaths objectAtIndex:0]; 
    NSString *databasePath = [documentsDir stringByAppendingPathComponent:dbFilename]; 

    if(filePath) 
    { 
     NSError *error = nil; 

     if(!yesNO && [[NSFileManager defaultManager] fileExistsAtPath:databasePath]) 
     { 
      NSLog(@"File already exist at path - instruction is not to overwrite"); 
      return YES; 
     } 
     else 
     { 
      [[NSFileManager defaultManager] removeItemAtPath:databasePath error:&error]; 
     } 

     error = nil; 

     [[NSFileManager defaultManager] copyItemAtPath:filePath toPath:databasePath error:&error]; 

     if(!error) 
      return YES; 

     NSLog(@"Error copying file :\n\n%@\n\nuserinfo:%@\n\nFailure reason: %@\n\n",[error localizedDescription],[[error userInfo] description],[error localizedFailureReason]); 
    } 
    return NO; 
} 
+0

所以这种方法从数据包复制数据库? – Noobass 2012-01-28 08:38:42

0

您可以通过请求捆绑软件中的资源路径来到达捆绑包。例如

NSString *path =[[NSBundle mainBundle] pathForResource:[self.imagesDict objectForKey:key] ofType:@"png"]; 
0

你可以很容易的路径与此

NSString* pathToDocument = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"]; 

记录这将返回的路径为“文档”文件夹,您可以访问读到这里,你需要得到&写入数据