2013-08-19 46 views
1

由於某種原因,我有一個dispatch_async線程,它崩潰,除非我有一個NSLog()方法執行在它前面。該塊運行一種從數據庫中檢索用戶名的方法。Obj-C:dispatch_async崩潰沒有NSLog

墜毀:

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{ 
    user_web_communicator *usrWeb = [[user_web_communicator alloc]init]; 
    NSString *author = [usrWeb getUsernameFromID:author_string]; 
    [_author_label setText:[NSString stringWithFormat:@"Author: %@",author]]; 
}); 

工作:

NSLog(@"Fetching author for id: %@",author_string); 
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{ 
    user_web_communicator *usrWeb = [[user_web_communicator alloc]init]; 
    NSString *author = [usrWeb getUsernameFromID:author_string]; 
    [_author_label setText:[NSString stringWithFormat:@"Author: %@",author]]; 
}); 

錯誤

2013-08-19 13:56:06.149 Poll Me[4995:c07] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: '{ 

行數:AsyncImageView:0x827aa00.minX == 10 + 1 * + 0x827b8d0.marker -1 * 0x8281210.marker + 0.5 * 0x8281260.marker AsyncImageView:0 x827aa00.minY == 27.5 + -1 * 0x827b910.marker + -1 * 0x82812a0.marker + 0.5 * 0x82812e0.marker + 0.5 * 0x82823f0.marker + -0.5 * AsyncImageView:0x827aa00.Height Regular_Cell:0x827a400.Height == 56 + 1 * 0x82823f0.marker Regular_Cell:0x827a400.Width == 320 + 1 * 0x8281ee0.marker Regular_Cell:0x827a400.minX == 0 + 1 * 0x8281740.marker + -0.5 * 0x8281ee0.marker Regular_Cell:0x827a400.minY = = 46 + 1 * 0x8281b30.marker + -0.5 * 0x82823f0.marker UILabel:0x827a8e0.Width == 0 + 1 * 0x827b730.marker + 1 * 0x827b790.marker + -1 * 0x827b7d0.marker + 1 * UILabel:0x827adc0 .Width UILabel:0x827a8e0.minX == 18 + 1 * 0x827b7d0.marker + 1 * 0x827b8d0.marker + -1 * 0x8281210.marker + 0.5 * 0x8281260.marker + 1 * AsyncImageView:0x827aa00.Width UILabel:0x827a8e0.minY == 19.5 + -1 * 0x827b810.m arker + 1 * 0x827b890.marker + -1 * 0x827b910.marker + -1 * 0x82812a0.marker + 0.5 * 0x82812e0.marker + 0.5 * 0x82823f0.marker + 0.5 * AsyncImageView:0x827aa00.Height + -1 * UILabel:0x827a8e0 .Height + -1 * UILabel:0x827b140.Height UILabel:0x827adc0.minX == 18 + 1 * 0x827b730.marker + 1 * 0x827b8d0.marker + -1 * 0x8281210.marker + 0.5 * 0x8281260.marker + 1 * AsyncImageView: 0x827aa00.Width UILabel:0x827adc0.minY == 20.5 + 1 * 0x827b6f0.marker + -1 * 0x82812a0.marker + 0.5 * 0x82812e0.marker UILabel:0x827b140.minX == 18 + 1 * 0x827b850.marker + 1 * 0x827b8d0。 marker + -1 * 0x8281210.marker + 0.5 * 0x8281260.marker + 1 * AsyncImageView:0x827aa00.Width UILabel:0x827b140.minY == 27.5 + 1 * 0x827b890.marker + -1 * 0x827b910.marker + -1 * 0x82812a0 .marker + 0.5 * 0x82812e0.marker + 0.5 * 0x82823f0.marker + 0.5 * AsyncImageView:0x827aa00.Height + -1 * UILabel: 0x827b140.Height UITableViewCellContentView:0x827a560.Height == 55 + 1 * 0x82812e0.marker UITableViewCellContentView:0x827a560.Width == 300 + 1 * 0x8281260.marker UITableViewCellContentView:0x827a560.minX == 0 + 1 * 0x8281210.marker + -0.5 * 0x8281260.marker UITableViewCellContentView:0x827a560.minY == 0.5 + 1 * 0x82812a0.marker + -0.5 * 0x82812e0.marker目標== <> + < 750:-1> * 0x8280fc0.negError + < 250:-1> * 0x8280fc0.posErrorMarker + < 750:-1> * 0x8281030.negError + < 250:-1> * 0x8281030.posErrorMarker

限制條件:標記:0x8281210.marker 標記:0x8281260.marker 標記:0x82812a0.marker(Integralization調整:0.5)標記:0x82812e0.marker 標記:0x8281740.marker 標記:0x8281b30.marker 標記:0x8280fc0.posErrorMarker 標記:0x8281030.posErrorMarker 標記:0x827b6f0.marker 標記:0x827b730 .marker 標記:0x827b790.marker 標記:0x827b7d0.marker 標記:0x827b810.marker 標記:0x827b850。標記 標記:0x827b890.marker 標記:0x827b8d0.marker 標記:0x827b910.marker 標記:0x8281ee0.marker 標記:0x82823f0.marker}:內部 錯誤。找不到傳入頭的傳出行頭 0x8280fc0.neg錯誤,應該不會發生。' *第一擲調用堆棧:(0x195d012 0x166ae7e 0x195cdeb 0xefef89 0xf01fcf 0xf025c7 0xf0d58f 0xf0d6d4 0x7d860a 0x7e02af 0x7e03be 0x2e7601 0x49484e 0x354ced 0x2e940c 0x354a7b 0x359919 0x3599cf 0x3421bb 0x352b4b 0x2ef2dd 0x167e6b0 0x17dfc0 0x17233c 0x172150 0xf00bc 0xf1227 0xf18e2 0x1925afe 0x1925a3d 0x19037c2 0x1902f44 0x1902e1b 0x29be7e3 0x29be668 0x29effc 0x1e5ed 0x1d75)2013-08-19 13:56:06.149輪詢我[4995:4f03] *由於未被捕獲而終止應用程序 異常'NSInternalInconsistencyException',原因:'{行: AsyncImageView:0x827aa00.minX == 10 + 1 * 0x827b8d0.marker + -1 * 0x8281210.marker + 0.5 * 0x8281260.marker AsyncImageView:0x827aa00.minY == 2 7.5 + -1 * 0x827b910.marker + -1 * 0x82812a0.marker + 0.5 * 0x82812e0.marker + 0.5 * 0x82823f0.marker + -0.5 * AsyncImageView:0x827aa00.Height Regular_Cell:0x827a400.Height == 56 + 1 * 0x82823f0。 marker Regular_Cell:0x827a400.Width == 320 + 1 * 0x8281ee0.marker Regular_Cell:0x827a400.minX == 0 + 1 * 0x8281740.marker + -0.5 * 0x8281ee0.marker Regular_Cell:0x827a400.minY == 46 + 1 * 0x8281b30.marker + -0.5 * 0x82823f0.marker UILabel:0x827a8e0.Width == 0 + 1 * 0x827b730.marker + 1 * 0x827b790.marker + -1 * 0x827b7d0.marker + 1 * UILabel:0x827adc0.Width UILabel:0x827a8e0 .minX == 18 + 1 * 0x827b7d0.marker + 1 * 0x827b8d0.marker + -1 * 0x8281210.marker + 0.5 * 0x8281260.marker + 1 * AsyncImageView:0x827aa00.Width UILabel:0x827a8e0.minY == 19.5 + - 1 * 0x827b810.marker + 1 * 0x827b890.marker + -1 * 0x827b910.marker + -1 * 0x82812a0.marker + 0.5 * 0x82812e0.marker + 0.5 * 0x82823f0.marker + 0.5 * AsyncImageView:0x827aa00.Height + -1 * UILabel:0x827a8e0.Height + -1 * UILabel:0x827b140.Height UILabel:0x827adc0.minX == 18 + 1 * 0x827b730.marker + 1 * 0x827b8d0.marker + -1 * 0x8281210.marker + 0.5 * 0x8281260.marker + 1 * AsyncImageView:0x827aa00。寬度UILabel:0x827adc0.minY == 20.5 + 1 * 0x827b6f0.marker + -1 * 0x82812a0.marker + 0.5 * 0x82812e0.marker UILabel:0x827b140.minX == 18 + 1 * 0x827b850.marker + 1 * 0x827b8d0.marker + -1 * 0x8281210.marker + 0.5 * 0x8281260.marker + 1 * AsyncImageView:0x827aa00.Width UILabel:0x827b140.minY == 27.5 + 1 * 0x827b890.marker + -1 * 0x827b910.marker + -1 * 0x82812a0.marker + 0.5 * 0x82812e0.marker + 0.5 * 0x82823f0.marker + 0.5 * AsyncImageView:0x827aa00.Height + -1 * UILabel:0x827b140.Height U ITableViewCellContentView:0x827a560.Height == 55 + 1 * 0x82812e0.marker UITableViewCellContentView:0x827a560.Width == 300 + 1 * 0x8281260.marker UITableViewCellContentView:0xlibC++ abi.dylib:terminate調用throwing exception827a560.minX == 0 + 1 * 0x8281210.marker + -0.5 * 0x8281260.marker UITableViewCellContentView:0x827a560.minY == 0.5 + 1 * 0x82812a0.marker + -0.5 * 0x82812e0.marker目標== <> + < 750:-1> * 0x8280fc0 .negError + < 250:-1> * 0x8280fc0.posErrorMarker + < 750:-1> * 0x8281030.negError + < 250:-1> * 0x8281030.posErrorMarker

限制條件:標記:0x8281210.marker 標記:0x8281260.marker 標記:0x82812a0.marker(Integralization調整:0.5)標記:0x82812e0.marker 標記:0x8281740.marker標記:0x8281b30.marker 標記:0x8280fc0.posErrorMarker 標記:0x8281030.posErrorMarker 標記:0x827b6f0 .marker 標記:0x827b730。標記 標記:0x827b790.marker 標記:0x827b7d0.marker 標記:0x827b810.marker 標記:0x827b850.marker 標記:0x827b890.marker 標記:0x827b8d0.marker 標記:0x827b910.marker 標記:0x8281ee0.marker 標記:0x82823f0.marker}:內部 錯誤。找不到傳入頭的傳出行頭 0x8280fc0.neg錯誤,應該不會發生。' *第一擲調用堆棧:(0x195d012 0x166ae7e 0x195cdeb 0xefef89 0xf01fcf 0xf020d3 0x7d86dc 0x7d9280 0x7dd4a3 0x3f7e3c 0x3f8022 0x3f8064 0x2f33b 0x277553f 0x2787014 0x27782e8 0x2778450 0x92710e72 0x926f8d2a)(LLDB)

可以請你告訴我,這可能是爲什麼發生了什麼?我不想保持NSLog()那裏,因爲它運行了幾次,並試圖讀取輸出時的方式。預先感謝您=)

+0

它如何崩潰? – Jesper

+1

如果你把實際的錯誤信息放在你的問題中,它可能會更容易回答:) –

+0

正在更新...很抱歉,錯誤信息很長 –

回答

6

這是未定義的行爲,以設置後臺線程中的標籤的文本屬性或任何其他UI更改。由於它是未定義的行爲,我無法解釋它爲什麼與NSLog一起工作,但您需要將標籤的文本分配給主線程。

+0

謝謝,這個作品很棒! –

+2

'dispatch_sync'可以在這個例子中工作,但是通常要小心,不要在兩個塊和它們的線程彼此等待時創建死鎖。 – Jesper