我正在使用Xcode 6和Swift在iOS应用程序中通过UIWebView显示PDF文件,如下所示:
@IBOutlet weak var displayWebView: UIWebView!
func displayView(viewfile: NSData){
displayWebView.loadData(viewfile, MIMEType: "application/pdf", textEncodingName: "UTF-8", baseURL: nil)
}
视图文件是来自前一个屏幕中的segue的NSData,它是一个tableview。
PDF的显示正常。但是,当应用程序在前一个屏幕上来回移动时,应用程序在“loadData”步骤中崩溃并显示“WebThread(xx):EXC_BAD_ACCESS(code = EXC_I386_GPFLT)”消息,如下所示:
libobjc.A.dylib`objc_msgSend:
0x106da3000 <+0>: testq %rdi, %rdi
0x106da3003 <+3>: jle 0x106da3068 ; <+104>
0x106da3005 <+5>: movq (%rdi), %r11
0x106da3008 <+8>: movq %rsi, %r10
-> 0x106da300b <+11>: andl 0x18(%r11), %r10d WebThread (24): EXC_BAD_ACCESS (code=EXC_I386_GPFLT)
0x106da300f <+15>: shlq $0x4, %r10
0x106da3013 <+19>: addq 0x10(%r11), %r10
0x106da3017 <+23>: cmpq (%r10), %rsi
有时,错误是:
WebKitLegacy`-[WebDataSource(WebPrivate) dataSourceDelegate]:
0x10c51dbb0 <+0>: pushq %rbp
0x10c51dbb1 <+1>: movq %rsp, %rbp
0x10c51dbb4 <+4>: movq 0x11ad95(%rip), %rax ; WebDataSource._private
0x10c51dbbb <+11>: movq (%rdi,%rax), %rax
-> 0x10c51dbbf <+15>: movq 0x18(%rax), %rax WebThread (17): EXC_BAD_ACCESS (code=EXC_I386_GPFLT)
0x10c51dbc3 <+19>: popq %rbp
0x10c51dbc4 <+20>: retq
0x10c51dbc5 <+21>: nopw %cs:(%rax,%rax)
无论iOS 8和iOS 7上的目标是什么,这些崩溃都会发生,故障点看起来是随机的。尽管在类似症状上有相似的帖子,但它们是Objective-C解决方案而不是Swift。
有人会告知解决Swift中的问题吗?
答案 0 :(得分:0)
为什么不在调用&#34; loadData&#34;后更新视图?块内的执行相对于其线程仍然是同步的。
[query findObjectsInBackgroundWithBlock:^(NSArray * _Nullable objects, NSError * _Nullable error) {
if (error) {
//handle error
}
else {
dispatch_async(dispatch_get_main_queue(), ^{
[self loadData];
[self updateView];
});
}
}];