2

我正在使用 UIWebView:loadRequest 和一个 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 部分并对其进行比较?

4

2 回答 2

1

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

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

于 2012-06-28T23:56:00.337 回答
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);
}
于 2012-06-29T00:22:25.213 回答