我正在尝试使用直接链接作为源路径从我的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集成到我的应用中?
答案 0 :(得分:1)
嗯,链接肯定有用,不,你不需要链接Dropbox和你的应用程序就可以了。
这里详细介绍了https和ios的一些问题:
iOS 5的TLS实施已升级为支持TLS协议1.2版。某些不兼容的TLS服务器实现不实现TLS 1.2,更重要的是,不要正常降级到支持的协议版本。因此,当针对以前版本的iOS SDK构建的相同应用程序连接时,您可能会发现某些针对iOS 5 SDK构建的TLS客户端应用程序可能无法连接到某些TLS服务器。
但是,我只是尝试使用以下代码检索它:
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"]];
这可能是将它保存到错误的地方,或者更糟糕的是根本不存在。