【发布时间】:2016-07-13 23:52:58
【问题描述】:
我已将一个 sqlite 文件添加到我的应用程序中,并尝试将其从捆绑包复制到文档目录。我也将 sqlite 添加到目标应用程序。以下是我用来复制文件的代码:
NSString *destination = [[[Utils applicationDocumentsDirectory] absoluteString] stringByAppendingString:@"myapp.sqlite"];
NSFileManager *fileManager = [NSFileManager defaultManager];
if (![fileManager fileExistsAtPath:destination]) {
NSString *source = [[NSBundle mainBundle] pathForResource:@"myapp" ofType:@"sqlite"];
NSError *error = nil;
[fileManager copyItemAtPath:source toPath:destination error:&error];
if (error) {
//
}
}
[Utils applicationDocumentsDirectory] 的代码:
+ (NSURL *)applicationDocumentsDirectory
{
return [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject];
}
但是当执行这段代码时,我得到以下error:
错误域=NSCocoaErrorDomain Code=4 "文件“myapp.sqlite” 不存在。” UserInfo={NSSourceFilePathErrorKey=/Users/harikrishnan/Library/Developer/CoreSimulator/Devices/8E531314-F1AE-417F-8E99-7AA92967CDC9/data/Containers/Bundle/Application/0A710929-475D-457C-8D2D-C2F2BBEB6B92/myapp.app/ myapp.sqlite, NSUserStringVariant=( 复制),NSDestinationFilePath=file:///Users/harikrishnant/Library/Developer/CoreSimulator/Devices/8E531314-F1AE-417F-8E99-7AA92967CDC9/data/Containers/Data/Application/13B22E15-D00C-433C-9F02-014B1F73D183/文件/myapp.sqlite, NSFilePath=/Users/harikrishnant/Library/Developer/CoreSimulator/Devices/8E531314-F1AE-417F-8E99-7AA92967CDC9/data/Containers/Bundle/Application/0A710929-475D-457C-8D2D-C2F2BBEB6B92/myapp.app/myapp.sqlite , NSUnderlyingError=0x7faffe1b5cf0 {错误域=NSPOSIXErrorDomain Code=2 "没有这样的文件或目录"}}
我使用终端检查了以下路径,发现 sqlite 文件实际上存在于 app bundle 中:
/Users/harikrishnant/Library/Developer/CoreSimulator/Devices/8E531314-F1AE-417F-8E99-7AA92967CDC9/data/Containers/Bundle/Application/0A710929-475D-457C-8D2D-C2F2BBEB6B92/myapp.app/myapp. sqlite
但我仍然收到此错误。我什么都试过了。我什至清理了构建文件夹并重新安装了应用程序,它仍然无法正常工作。这里有什么问题?如何解决?
【问题讨论】:
-
使用
Utils applicationDocumentsDirectory的代码更新您的问题。 -
@rmaddy 添加了代码。
-
您获取文档 URL 的代码是正确的。但我建议您调用
path而不是absoluteString将NSURL转换为路径字符串。 -
@rmaddy 成功了!!!!但是你能解释一下
absoluteString和path之间有什么区别吗? -
您还需要将
stringByAppendingString:更改为stringByAppendingPathComponent:。
标签: ios objective-c nsfilemanager nsbundle