2015-09-05 53 views
0

我使用的Xcode 6斯威夫特顯示通過一個UIWebView PDF文件中的iOS應用程序如下:的Xcode 6斯威夫特WebThread崩潰與EXC_BAD_ACCESS錯誤

@IBOutlet weak var displayWebView: UIWebView! 

func displayView(viewfile: NSData){ 
    displayWebView.loadData(viewfile, MIMEType: "application/pdf", textEncodingName: "UTF-8", baseURL: nil) 
} 

的viewfile是NSData的來自賽格瑞在先前的屏幕這是一個tableview。

PDF的顯示正常工作。但是,當應用程序來回走,並從先前的屏幕,在「loadData」步與應用程序崩潰「WebThread(XX):EXC_BAD_ACCESS(代碼= 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

看到,如果代碼是從主線程執行,如果沒有,使它從該線程執行,以防萬一。 – SpaceDog

+0

代碼沒有從主線程執行getDataInBackgroundWithBlock中的塊以從parse.com獲取數據,然後在塊中執行loaddata以確保在顯示之前提取數據。如果從主線程執行loaddata,則不知道該塊已完成。在這種情況下,我如何知道(在主線程中)getDataInBackgroundWithBlock已經完成,然後執行loaddata? –

回答

0

爲什麼在調用「loadData」後不更新視圖?塊內的執行仍然與其線程同步。

[query findObjectsInBackgroundWithBlock:^(NSArray * _Nullable objects, NSError * _Nullable error) { if (error) { //handle error } else { dispatch_async(dispatch_get_main_queue(), ^{ [self loadData]; [self updateView]; }); } }];