My UIWebView
는 UIAlertController
이 코드에서 다음과 같은 메시지를 표시하여 다운로드 가능한 콘텐츠를 다운로드 할 책임 이 있습니다.
func webView(_ webView: UIWebView, shouldStartLoadWith request: URLRequest, navigationType: UIWebViewNavigationType) -> Bool {
let nvc = self.tabBarController?.viewControllers?[1] as! UINavigationController
let dvc = nvc.viewControllers[0] as! RCHDownloadTVC
var isDownloadable = false
let session = URLSession(configuration: URLSessionConfiguration.default())
var newRequest = URLRequest(url: request.url!)
newRequest.httpMethod = "HEAD"
let task = session.dataTask(with: newRequest) { (data, response, error) in
let httpResponse = response as? HTTPURLResponse
if httpResponse?.statusCode == 200 {
for (_, mime) in self.supportedFileTypes.enumerated() {
if response?.mimeType == mime {
self.showDownloadDecisionAlert(with: { (alert) in
self.sharedStore.addDownload(with: (request.url?.absoluteString)!)
dvc.reloadDownloadController()
self.webView.mediaPlaybackRequiresUserAction = true
self.webView.allowsInlineMediaPlayback = false
self.webView.goBack()
isDownloadable = true
}, completionHandlerTwo: { (alert) in
self.webView.mediaPlaybackRequiresUserAction = false
self.webView.allowsInlineMediaPlayback = true
isDownloadable = false
})
break
}
}
}
}
task.resume()
if isDownloadable != true {
return true
} else {
return false
}
}
파일을 다운로드 completionHandlerTwo
할 수 없는 경우 실행되지만 문제는 언제 completionHandlerTwo
실행되고 UIWebView의 기본 AVPlayerViewController에 비디오가 표시됩니다.이 경고가 표시됩니다.
2016-06-21 14 : 36 : 14.962 DownloadAddict [1102 : 299310]이 애플리케이션은 백그라운드 스레드에서 자동 레이아웃 엔진을 수정하고 있으며, 이로 인해 엔진 손상 및 이상한 충돌이 발생할 수 있습니다. 이로 인해 향후 릴리스에서 예외가 발생합니다.
Stack trace:(
0 CoreFoundation 0x0000000183cb2dc8 <redacted> + 148
1 libobjc.A.dylib 0x0000000183317f80 objc_exception_throw + 56
2 CoreFoundation 0x0000000183cb2cf8 <redacted> + 0
3 Foundation 0x0000000184763b2c <redacted> + 88
4 Foundation 0x00000001845e4c3c <redacted> + 36
5 UIKit 0x0000000188f18d98 <redacted> + 64
6 UIKit 0x0000000188f198b0 <redacted> + 244
7 UIKit 0x00000001896a77f0 <redacted> + 268
8 UIKit 0x0000000189124aa0 <redacted> + 176
9 UIKit 0x0000000188e0c1e4 <redacted> + 656
10 QuartzCore 0x000000018679e994 <redacted> + 148
11 QuartzCore 0x00000001867995d0 <redacted> + 292
12 QuartzCore 0x0000000186799490 <redacted> + 32
13 QuartzCore 0x0000000186798ac0 <redacted> + 252
14 QuartzCore 0x0000000186798820 <redacted> + 500
15 WebCore 0x0000000188972270 <redacted> + 176
16 WebCore 0x0000000188934fa4 <redacted> + 368
17 CoreFoundation 0x0000000183c6909c <redacted> + 24
18 CoreFoundation 0x0000000183c68b30 <redacted> + 540
19 CoreFoundation 0x0000000183c66830 <redacted> + 724
20 CoreFoundation 0x0000000183b90c50 CFRunLoopRunSpecific + 384
21 WebCore 0x0000000187b7e61c <redacted> + 456
22 libsystem_pthread.dylib 0x0000000183917b28 <redacted> + 156
23 libsystem_pthread.dylib 0x0000000183917a8c <redacted> + 0
24 libsystem_pthread.dylib 0x0000000183915028 thread_start + 4
)
이는 UI가 메인 스레드에서 작동하지 않음을 의미합니다. 왜 이런 일이 발생합니까?
당신은 전화해야합니다
dispatch_async(dispatch_get_main_queue()) {...}
session.dataTask
줄 뒤에 메인 스레드에서 실행합니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다