[myWebView loadHTMLString:htmlString baseURL:documentsDirectoryURL]
HTMLのローカルNSStringとアプリの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">
最初の起動時にこれが発生します:
...そしてこれ以降の起動時: