2

UIWebView:loadRequest を使用して、URL から設定された NSURLRequest を使用してローカル ファイルを開いています。

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

したがって、これらは両方とも同じファイルを参照しますが、2 つを比較する必要がある状況があり (/ABC/XYZ/page.html の部分を比較する必要があります)、2 つを比較すると NSURL:isEqual は NO を返します。 .

a) file://localhost/var/mobile/... の代わりに file:///var/mobile/... を返す NSFileManager のメソッド

また

b) /ABC/XYZ/page.html 部分だけを簡単に抽出し、それを比較しますか?

4

2 に答える 2

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 に答える
1

両方の URL を呼び出しURLByStandardizingPathて、元の結果ではなくそれらの結果を比較してみてください。

それがうまくいかない場合は、pathComponents両方の URL を呼び出して、返された両方の配列の最後と最後から 2 番目のオブジェクトを比較することで、最後の 2 つのパス コンポーネントだけを比較できます。

于 2012-06-28T23:56:00.337 に答える