从Dropbox下载sqlite数据库

时间:2012-12-22 02:17:07

标签: iphone xcode dropbox

我正在尝试使用直接链接作为源路径从我的Dropbox下载sqlite数据库,然后将其保存到应用程序的文档文件中。它只是一种更新数据库的方法,无需更新应用程序。

在下载之前检查文件是否存在时,文件不可见。

NSFileManager *fileManager = [NSFileManager defaultManager];

NSString *sourceDBPath = @"https://www.dropbox.com/s/868vvg7uremst9n/Data.sqlite?dl=1";

if ([fileManager fileExistsAtPath:sourceDBPath])
{

NSData *dbFile = [[NSData alloc] initWithContentsOfURL:[NSURL URLWithString:@"https://www.dropbox.com/s/868vvg7uremst9n/Data.sqlite?dl=1"]];

NSString *resourceDocPath = [[NSString alloc] initWithString:[[[[NSBundle mainBundle]  resourcePath] stringByDeletingLastPathComponent] stringByAppendingPathComponent:@"Documents"]];

NSString *filePath = [resourceDocPath stringByAppendingPathComponent:@"Database.sqlite"];


[dbFile writeToFile:filePath atomically:YES];
}

即使我使用该文件的直接链接,我是否需要将Dropbox SDK集成到我的应用中?

1 个答案:

答案 0 :(得分:1)

嗯,链接肯定有用,不,你不需要链接Dropbox和你的应用程序就可以了。

这里详细介绍了https和ios的一些问题:

iOS 5的TLS实施已升级为支持TLS协议1.2版。某些不兼容的TLS服务器实现不实现TLS 1.2,更重要的是,不要正常降级到支持的协议版本。因此,当针对以前版本的iOS SDK构建的相同应用程序连接时,您可能会发现某些针对iOS 5 SDK构建的TLS客户端应用程序可能无法连接到某些TLS服务器。

Excerpted from...

更新

但是,我只是尝试使用以下代码检索它:

NSString *dropboxHttpsUrl = @"https://www.dropbox.com/s/868vvg7uremst9n/Data.sqlite?dl=1";
NSData *dbFile = [[NSData alloc] initWithContentsOfURL:
                      [NSURL URLWithString:dropboxHttpsUrl]];

if(dbFile) {
   NSLog(@"%i", [dbFile length]);
   NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
   NSString *documentsDirectory = [paths objectAtIndex:0];
   NSString *appFile = [documentsDirectory stringByAppendingPathComponent:@"test.db"];
   [dbFile writeToFile:appFile atomically:YES];
   NSLog(@"%@", appFile);
}else{
   NSLog(@"nothing got retrieved");
}

我能够获取数据库并查看空Example表和架构。

以更标准的方式构建文档路径:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *appFile = [documentsDirectory stringByAppendingPathComponent:@"test.db"];

不要这样做:

NSString *resourceDocPath = [[NSString alloc] initWithString:[[[[NSBundle mainBundle]  resourcePath] stringByDeletingLastPathComponent] stringByAppendingPathComponent:@"Documents"]];

这可能是将它保存到错误的地方,或者更糟糕的是根本不存在。