我正在使用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部分并对其进行比较?
答案 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);
}