Har*_*nan 2 objective-c nsfilemanager nsbundle ios
我已将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) {
//
}
}
Run Code Online (Sandbox Code Playgroud)
代码[Utils applicationDocumentsDirectory]:
+ (NSURL *)applicationDocumentsDirectory
{
return [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject];
}
Run Code Online (Sandbox Code Playgroud)
但是当执行此代码时,我得到以下内容error:
错误域= NSCocoaErrorDomain代码= 4"文件"myapp.sqlite"不存在." 的UserInfo = {NSSourceFilePathErrorKey = /用户/ harikrishnant /库/开发商/ CoreSimulator /设备/ 8E531314-F1AE-417F-8E99-7AA92967CDC9 /数据/容器/捆绑/应用/ 0A710929-475D-457C-8D2D-C2F2BBEB6B92/myapp.app/myapp.sqlite,NSUserStringVariant =(Copy),NSDestinationFilePath = file:/// Users/harikrishnant/Library/Developer/CoreSimulator/Devices/8E531314-F1AE-417F-8E99-7AA92967CDC9/data/Containers/Data/Application/13B22E15-D00C -433C-9F02-014B1F73D183/Documents/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 {Error Domain = NSPOSIXErrorDomain Code = 2"No such file or directory"}}
我使用终端检查了以下路径,并发现应用程序包中实际存在sqlite文件:
/Users/harikrishnant/Library/Developer/CoreSimulator/Devices/8E531314-F1AE-417F-8E99-7AA92967CDC9/data/Containers/Bundle/Application/0A710929-475D-457C-8D2D-C2F2BBEB6B92/myapp.app/myapp.sqlite
但我仍然得到这个错误.我尝试了一切.我甚至清理了构建文件夹并重新安装了应用程序,它仍然无法正常工作.这可能是什么问题?怎么解决?
你的代码几乎是正确的.这条线有两个缺点:
NSString *destination = [[[Utils applicationDocumentsDirectory] absoluteString] stringByAppendingString:@"myapp.sqlite"];
Run Code Online (Sandbox Code Playgroud)
使用absoluteString不正确.这会在表单中提供文件URL file://path/to/Documents/.您需要使用该path方法从中获取文件路径(而不是文件URL)NSURL.
然后,您需要将文件名正确附加到路径.你需要使用stringByAppendingPathComponent:而不是stringByAppendingString:.
该行应该是:
NSString *destination = [[[Utils applicationDocumentsDirectory] path] stringByAppendingPathComponent:@"myapp.sqlite"];
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
957 次 |
| 最近记录: |