如何将“file:// localhost / var / mobile / ...”的URL与“file:/// var / mobile / ...”进行比较

时间:2012-06-28 23:09:58

标签: ios uiwebview nsurl nsfilemanager

我正在使用UIWebView打开一个本地文件:loadRequest with NSURLRequest,而NSURLRequest又是从URL设置的。

url的基本位置使用以下方式获取:

    baseDirectory = [[NSFileManager defaultManager] URLForDirectory:NSApplicationSupportDirectory
                                                                        inDomain:NSUserDomainMask
                                                                appropriateForURL:nil   
                                                                            create: YES
                                                                            error:&err];

这将返回以下格式的URL:

file://localhost/var/mobile/Applications/Library/ApplicationSupport/ABC/XYZ/page.html

但是当UIWebViewDelegate shouldStartLoadForRequest:(NSURLRequest *)方法被调用时,传递的NSURLRequest已更改为以下内容:

file:///var/mobile/Applications/Library/ApplicationSupport/ABC/XYZ/page.html

因此这两个引用相同的文件,但我有一种情况需要在两者之间进行比较(我需要比较/ABC/XYZ/page.html部分)和NSURL:isEqual返回NO时比较两者。

是否有: a)NSFileManager的一个方法,它将返回file:/// var / mobile / ...而不是file:// localhost / var / mobile / ...

b)轻松提取/ABC/XYZ/page.html部分并对其进行比较?

2 个答案:

答案 0 :(得分:1)

您可以尝试在两个网址上调用URLByStandardizingPath并比较这些结果而不是原始结果。

如果这不起作用,您可以通过在两个URL上调用pathComponents并比较两个返回数组中的最后一个和倒数第二个对象来比较最后两个路径组件。

答案 1 :(得分:1)

如果您知道两个文件将始终位于同一台计算机上,则[[URL1 path] isEqualToString:[URL2 path]]


以下单元测试通过:

- (void)testURLPath
{
    NSURL *URL = [NSURL URLWithString:@"file://localhost/foo/bar/baz"];
    NSString *path = [URL path];
    STAssertEqualObjects(path, @"/foo/bar/baz", nil);
}

- (void)testURLPathCompare
{
    NSURL *URL1 = [NSURL URLWithString:@"file://localhost/foo/bar/baz"];
    NSURL *URL2 = [NSURL URLWithString:@"file:///foo/bar/baz"];
    NSString *path1 = [URL1 path];
    NSString *path2 = [URL2 path];
    STAssertTrue([path1 isEqualToString:path2], nil);
    STAssertTrue([[URL1 path] isEqualToString:[URL2 path]], nil);
}