0

我正在使用[myWebView loadHTMLString:htmlString baseURL:documentsDirectoryURL]本地 NSString 的 HTML 和应用程序的 Documents 目录中的目录的 baseURL 加载 UIWebView。

问题是 HTML 包含<img>带有从上述目录加载的图像的标签。它不是包含图像的 Documents 目录中的目录,而是包含指向应用程序包中包含的图像的符号链接。

首次启动时加载 UIWebView 时,图像无法加载,导致标准 Safari 蓝色问号。如果我然后退出应用程序,重新启动并再次加载 UIWebView 图像加载正常。

有没有其他人有这个问题?

符号链接是这样创建的:

- (void)createSymbolicLinksForURL:(NSURL *)url inDirectory:(NSURL *)directory {

    NSFileManager *fileManager = [NSFileManager defaultManager];

    NSDirectoryEnumerator *dirEnum = [fileManager enumeratorAtURL:url
                                       includingPropertiesForKeys:[NSArray arrayWithObject:NSURLIsDirectoryKey] 
                                                          options:NSDirectoryEnumerationSkipsHiddenFiles | NSDirectoryEnumerationSkipsPackageDescendants
                                                     errorHandler:nil];

    NSArray *resourceKeys = [NSArray arrayWithObjects:NSURLIsSymbolicLinkKey, NSURLIsDirectoryKey, nil];

    for (NSURL *bundledURL in dirEnum) {

        if ([[[bundledURL resourceValuesForKeys:resourceKeys error:nil] objectForKey:NSURLIsDirectoryKey] boolValue]) continue;

        NSArray *bundledURLPathComponents = [bundledURL pathComponents];

        NSURL *destinationURL = directory;

        for (NSUInteger componentIndex = [bundledURLPathComponents count] - dirEnum.level; componentIndex < [bundledURLPathComponents count]; componentIndex++) {

            destinationURL = [destinationURL URLByAppendingPathComponent:[bundledURLPathComponents objectAtIndex:componentIndex]];
        }

        if ([fileManager fileExistsAtPath:destinationURL.path]) {

            if ([[[destinationURL resourceValuesForKeys:resourceKeys error:nil] objectForKey:NSURLIsSymbolicLinkKey] boolValue]) {

                [fileManager removeItemAtURL:destinationURL error:nil];
            }
            else {

                continue;
            }
        }

        NSURL *container = [destinationURL URLByDeletingLastPathComponent];
        if (![fileManager fileExistsAtPath:container.path]) [fileManager createDirectoryAtURL:container withIntermediateDirectories:YES attributes:nil error:nil];

        NSError *error = nil;
        [fileManager createSymbolicLinkAtURL:destinationURL withDestinationURL:bundledURL error:&error];
        if (error) NSLog(@"Failed to create symbolic link for %@ (Error: %@)", bundledURL, error);
    }
}

UIWebView 加载的 HTML 字符串如下所示(这只是一个片段):

<img src="images/thumb.jpg">
<img src="images/thumb1.jpg">
<img src="images/thumb2.jpg">

在第一次启动时导致:

首次发射

...这在任何后续发布中:

后续推出

4

1 回答 1

2

似乎将符号链接移动到 Documents 目录的根目录中,因此将<img>标签缩短为<img src="thumb.jpg">,例如,解决了问题 - 首次启动时加载的图像。

这还不足以解决问题,因为我确实需要将资源分组到 Documents 目录中的目录中。所以我改为尝试扩展<img>标签以包含符号链接的绝对 URL。例如(在模拟器中运行时):

<img src="file://localhost/Users/adam/Library/Application%20Support/iPhone%20Simulator/5.1/Applications/677CFABC-D16A-42C8-8F08-6FF415522FB6/Documents/images/thumb.jpg">

..它有效!

感谢SP Varma的提示!

于 2012-08-23T12:13:36.050 回答