在应用程序openURL中传递的URL:不存在

时间:2013-12-22 05:33:09

标签: ios objective-c nsfilemanager nsurl

当在我的应用程序中调用处理已打开文件(来自其他应用程序)的App Delegate方法时,它传递给我的应用程序的URL是nil ...或者至少是NSFileManager告诉我的那个,因为该文件确实存在于它指定的位置。

为什么NSFileManager告诉我应用文档收件箱中文件的文件URL不存在?以下是我处理网址的方式:

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
    if (![[NSFileManager defaultManager] fileExistsAtPath:[url absoluteString]]) {
        NSLog(@"File does not exist at path: %@", [url absoluteString]);
    } else {
        ...
    }
}

我一直试图解决这个问题,但是我想不出为什么这里的url参数会注册为不存在的原因。这可能非常简单。也许absoluteString的事情正在绊倒NSFileManager?

有什么想法吗?我一直在搜索和搜索,但什么都没找到 - 而且什么也没想到。

3 个答案:

答案 0 :(得分:1)

将(文件)URL转换为路径的正确方法是path,而不是absoluteString if (![[NSFileManager defaultManager] fileExistsAtPath:[url path]]) { ...

-[NSURL path]

来自isFileURL的文档:

  

如果此URL对象包含文件URL(由absoluteString确定),   该方法的返回值适合输入到方法中   NSFileManager或NSPathUtilities。

另一方面,

{{1}}返回一个URL字符串,如“file:/// path / to / file”。

答案 1 :(得分:1)

这里的第一个错误是你正在使用-[NSURL absoluteString]。您想要path

然而,另一个问题甚至可能是测试文件是否存在。这很少有用,您应该尝试对文件执行某些操作,处理发生的任何故障。

如果您真的必须测试它的存在,请使用更现代的-[NSURL checkResourceIsReachableAndReturnError:]

答案 2 :(得分:0)

您应该在使用NSFileManager前检查网址:

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
    if (url && [url isFileURL])
    {
        if (![[NSFileManager defaultManager] fileExistsAtPath:[url absoluteString]]) {
        NSLog(@"File does not exist at path: %@", [url absoluteString]);
        } 
        else 
        {
           ...
        }
    }
}