2014-03-25 30 views
11

我得到一個「只有主線程上運行」異常內心深處(或之後)「只有主線程上運行」的例外是模擬器只

[self.navigationController pushViewController:controller animated:YES]; 

事情是它只是發生在模擬器,而不是在IOS設備中進行調試。
我可以解決這個問題嗎?

轉儲:

2014-03-25 15:18:45.061 Cookila[657:5507] *** Assertion failure in void _UIPerformResizeOfTextViewForTextContainer(NSLayoutManager *, UIView<NSTextContainerView> *, NSTextContainer *, NSUInteger)(), /SourceCache/UIFoundation_Sim/UIFoundation-264.8/UIFoundation/TextSystem/NSLayoutManager_Private.m:1510 
2014-03-25 15:18:45.086 Cookila[657:5507] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Only run on the main thread!' 
*** First throw call stack: 
(
    0 CoreFoundation      0x027251e4 __exceptionPreprocess + 180 
    1 libobjc.A.dylib      0x024a48e5 objc_exception_throw + 44 
    2 CoreFoundation      0x02725048 +[NSException raise:format:arguments:] + 136 
    3 Foundation       0x01f43b20 -[NSAssertionHandler handleFailureInFunction:file:lineNumber:description:] + 101 
    4 UIFoundation      0x0947fe25 -[NSLayoutManager(NSPrivate) _resizeTextViewForTextContainer:] + 419 
    5 UIFoundation      0x0947fb0a -[NSLayoutManager(NSPrivate) _recalculateUsageForTextContainerAtIndex:] + 2083 
    6 UIFoundation      0x094b4289 _enableTextViewResizing + 234 
    7 UIFoundation      0x094b7e89 -[NSLayoutManager textStorage:edited:range:changeInLength:invalidatedRange:] + 688 
    8 UIFoundation      0x094b7f0e -[NSLayoutManager processEditingForTextStorage:edited:range:changeInLength:invalidatedRange:] + 82 
    9 UIFoundation      0x094e0ab5 -[NSTextStorage _notifyEdited:range:changeInLength:invalidatedRange:] + 153 
    10 UIFoundation      0x094e05f0 -[NSTextStorage processEditing] + 462 
    11 UIFoundation      0x094e0199 -[NSTextStorage endEditing] + 80 
    12 UIFoundation      0x094e0223 -[NSTextStorage coordinateEditing:] + 66 
    13 UIKit        0x016618cb -[UITextView setAttributedText:] + 254 
    14 UIKit        0x01660c16 -[UITextView initWithCoder:] + 706 
    15 UIKit        0x01372d6d UINibDecoderDecodeObjectForValue + 704 
    16 UIKit        0x01372f6e UINibDecoderDecodeObjectForValue + 1217 
    17 UIKit        0x01372aa1 -[UINibDecoder decodeObjectForKey:] + 114 
    18 UIKit        0x00faafa4 -[UIView initWithCoder:] + 842 
    19 UIKit        0x01372d6d UINibDecoderDecodeObjectForValue + 704 
    20 UIKit        0x01372f6e UINibDecoderDecodeObjectForValue + 1217 
    21 UIKit        0x01372aa1 -[UINibDecoder decodeObjectForKey:] + 114 
    22 UIKit        0x00faafa4 -[UIView initWithCoder:] + 842 
    23 UIKit        0x00fcdff1 -[UIScrollView initWithCoder:] + 58 
    24 UIKit        0x01372d6d UINibDecoderDecodeObjectForValue + 704 
    25 UIKit        0x01372aa1 -[UINibDecoder decodeObjectForKey:] + 114 
    26 UIKit        0x0120d7a7 -[UIRuntimeConnection initWithCoder:] + 191 
    27 UIKit        0x01372d6d UINibDecoderDecodeObjectForValue + 704 
    28 UIKit        0x01372f6e UINibDecoderDecodeObjectForValue + 1217 
    29 UIKit        0x01372aa1 -[UINibDecoder decodeObjectForKey:] + 114 
    30 UIKit        0x0120cc21 -[UINib instantiateWithOwner:options:] + 1117 
    31 UIKit        0x010756f5 -[UIViewController _loadViewFromNibNamed:bundle:] + 280 
    32 UIKit        0x01075e9d -[UIViewController loadView] + 302 
    33 UIKit        0x010760d3 -[UIViewController loadViewIfRequired] + 78 
    34 UIKit        0x010765d9 -[UIViewController view] + 35 
    35 UIKit        0x01090942 -[UINavigationController _startCustomTransition:] + 778 
    36 UIKit        0x0109d8f7 -[UINavigationController _startDeferredTransitionIfNeeded:] + 688 
    37 UIKit        0x0109e4e9 -[UINavigationController __viewWillLayoutSubviews] + 57 
    38 UIKit        0x011df0d1 -[UILayoutContainerView layoutSubviews] + 213 
    39 UIKit        0x00fc6964 -[UIView(CALayerDelegate) layoutSublayersOfLayer:] + 355 
    40 libobjc.A.dylib      0x024b682b -[NSObject performSelector:withObject:] + 70 
    41 QuartzCore       0x00e2e45a -[CALayer layoutSublayers] + 148 
    42 QuartzCore       0x00e22244 _ZN2CA5Layer16layout_if_neededEPNS_11TransactionE + 380 
    43 QuartzCore       0x00e220b0 _ZN2CA5Layer28layout_and_display_if_neededEPNS_11TransactionE + 26 
    44 QuartzCore       0x00d887fa _ZN2CA7Context18commit_transactionEPNS_11TransactionE + 294 
    45 QuartzCore       0x00d89b85 _ZN2CA11Transaction6commitEv + 393 
    46 QuartzCore       0x00d89dd6 _ZN2CA11Transaction14release_threadEPv + 226 
    47 libsystem_pthread.dylib    0x031f581c _pthread_tsd_cleanup + 93 
    48 libsystem_pthread.dylib    0x031f227e _pthread_exit + 108 
    49 libsystem_pthread.dylib    0x031f21e8 pthread_exit + 33 
    50 Foundation       0x01ef1dd2 __NSFinalizeThreadData + 0 
    51 Foundation       0x01eee97e __NSThread__main__ + 1299 
    52 libsystem_pthread.dylib    0x031f15fb _pthread_body + 144 
    53 libsystem_pthread.dylib    0x031f1485 _pthread_struct_init + 0 
    54 libsystem_pthread.dylib    0x031f6cf2 thread_start + 34 
) 
libc++abi.dylib: terminating with uncaught exception of type NSException 
+0

問題和答案並沒有真正幫助我,但它只能運行在模擬器上你的意見是非常有益的。我在模擬器中運行時遇到類似的錯誤消息,但它在實際設備上運行良好。 – TenaciousJay

回答

27

請從主線程做你的UI回調。您必須從不從後臺線程更新您的用戶界面。

做你的UI更新,像這樣,使用大中央調度:

dispatch_async(dispatch_get_main_queue(), ^{ 
    /* Your UI code */ 
}); 
0

原因是使用電話從不同的線程代碼。你嘗試一些dispatch_asyns什麼的?

0

這聽起來像你調用從後臺線程-pushViewController。所有UI活動必須在主線程上發生。要解決這個

一個簡單的方法是:

[self.navigationController performSelectorOnMainThread:@selector(pushViewController) withObject:controller] 

這將導致-pushViewController在主線程中執行。

3

Swift中的代碼。

dispatch_async(dispatch_get_main_queue()){ 
     self.navigationController?.setViewControllers([viewController], animated: true) 

    } 
2

在SWIFT 3.0或更高版本

DispatchQueue.main.async(){ 
    //write your code 
} 
相關問題