:
-(BOOL)application:(UIApplication *)application
openURL:(NSURL *)url
sourceApplication:(NSString *)sourceApplication
annotation:(id)annotation {
if (url != nil && [url isFileURL]) {
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSFileManager *filemgr;
NSError *erf;
filemgr = [NSFileManager defaultManager];
if ([filemgr copyItemAtPath:[NSString stringWithFormat:@"%@", url] toPath:documentsDirectory error: &erf] == YES)
NSLog (@"Copy successful");
else
NSLog (@"Copy failed%@dest: %@", erf, url);
}
return YES;
}
我想复制文件到我的应用程序,但我有这个错误:
错误Domain = NSCocoaErrorDomain Code = 260“操作无法完成。(Cocoa错误260.)”UserInfo = 0x200826c0 {NSFilePath = file:// localhost / private / var / mobile / Applications / < em> * .pdf,NSUnderlyingError = 0x20082510“操作无法完成。没有这样的文件或目录”} WHI?
答案 0 :(得分:1)
您无法使用NSURL
将代表文件网址的NSString
转换为stringWithFormat:
。您需要在path
上调用NSURL
方法。 toPath:
参数必须是包含文件名的完整路径,而不仅仅是您要复制到的目录。
NSString *sourcePath = [url path];
NSString *destPath = [documentsDirectory stringByAppendingPathComponent:[url lastPathComponent]];
if ([filemgr copyItemAtPath:sourcePath toPath:destPath error:&erf]) {
答案 1 :(得分:0)
您可能想要考虑将其移动到后台队列/线程,因为您实际上是在调用应用程序时将其锁定。这有两个主要的副作用
我会编写一个新的方法来获取一个URL进行复制,然后你可以对该方法进行一些单元测试,以确保它是可靠的,然后再将它安排到应用程序中的队列/后台线程:openURL:sourceApplication:注释: