我正在尝试将应用程序包中的文件复制到应用程序的文档目录中。我收到一个错误,“Cocoa Error 262”。我究竟做错了什么?这是我的代码:
NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"CoreData.sqlite"];
NSURL *initialURL = [NSURL URLWithString:[[NSBundle mainBundle] pathForResource:@"CoreData" ofType:@"sqlite"]];
NSError *error = nil;
if (![[NSFileManager defaultManager] fileExistsAtPath:[initialURL absoluteString]]) {
NSLog(@"Original does not exist. \nPath: %@", [initialURL absoluteString]);
}
if (![[NSFileManager defaultManager] fileExistsAtPath:[storeURL absoluteString]]) {
NSLog(@"Destination file does not exist. \nPath: %@", [storeURL absoluteString]);
[[NSFileManager defaultManager] copyItemAtURL:initialURL toURL:storeURL error:&error];
NSLog(@"Error: %@", [error description]);
}
答案 0 :(得分:32)
问题是您正在使用普通的旧文件路径初始化URL。
NSURL *initialURL =
[NSURL URLWithString:[[NSBundle mainBundle] pathForResource:@"CoreData"
ofType:@"sqlite"]];
改为使用[NSURL fileURLWithPath:]
。
答案 1 :(得分:3)
您收到的错误是
NSFileReadUnsupportedSchemeError
Read error because the specified URL scheme is unsupported
我认为这意味着你的一条路径没有正确形成。或许将这些路径写入日志,看看它们是否按照您的预期出现。
答案 2 :(得分:2)
我已经解决了这个问题,虽然说实话,但我不确定它是什么。我必须再次查看工作代码,但现在是:
NSError *error = nil;
NSString *documentsDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
NSString *filePath = [documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.%@", @"CoreData", @"sqlite"]];
//if file does not exist in document directory, gets original from mainbundle and copies it to documents.
if (![[NSFileManager defaultManager] fileExistsAtPath:filePath]) {
NSString *defaultFilePath = [[NSBundle mainBundle] pathForResource:@"CoreData" ofType:@"sqlite"];
[[NSFileManager defaultManager] copyItemAtPath:defaultFilePath toPath:filePath error:&error];
if (error != nil) {
NSLog(@"Error: %@", error);
}
}
修改:
我怀疑应用程序目录的路径不正确,因为生成的applicationDocumentsDirectory
的主体看起来与上面显示的documentsDorectory
变量的值所使用的方法不同。
答案 3 :(得分:1)
错误262在FoundationErrors.h中定义为NSFileReadUnsupportedSchemeError。
我建议您使用NSLog()写出您正在使用的两个URL的文字值,并确保它们是file:// URL并且它们看起来很完整。