我已经在应用程序中添加了一个sqlite文件,并试图将其从分发包复制到documents目录。我也将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代码= 4“文件“ myapp.sqlite”不存在。” UserInfo = {NSSourceFilePathErrorKey = / Users / harikrishnant / Library / Developer / CoreSimulator / Devices / 8E531314-F1AE-417F-8E99-7AA92967CDC9 / data / Containers / Bundle / Application / 0A710929-475D-457C-8D2D-C2F2BBEB6B92 / myapp。 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 / 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“
我使用终端检查了以下路径,并发现sqlite文件实际上存在于应用程序捆绑包中:
/用户/ harikrishnant /库/开发人员/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"];
的使用absoluteString
不正确。这将以形式提供文件URL file://path/to/Documents/
。您需要使用path
方法从中获取文件路径(而非文件URL)NSURL
。
然后,您需要将文件名正确附加到路径中。您需要使用stringByAppendingPathComponent:
而不是stringByAppendingString:
。
该行应为:
NSString *destination = [[[Utils applicationDocumentsDirectory] path] stringByAppendingPathComponent:@"myapp.sqlite"];
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句