2016-06-08 108 views
0

我在使用自定義類的UITableView中列出了視頻。這是tabbar應用程序。當我向下滾動到第8個視頻,並轉到下一個屏幕,當我回到視頻列表屏幕時,應用程序崩潰。我試圖調試,但無法找出問題。這是我從調試器中得到的。什麼原因導致我的應用在回到屏幕時崩潰?

2016-06-08 12:47:46.919 Votocast[2283:453809] *** Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[__NSArrayM objectAtIndex:]: index 8 beyond bounds for empty array' 
*** First throw call stack: 
(
    0 CoreFoundation      0x0000000108ba9d85 __exceptionPreprocess + 165 
    1 libobjc.A.dylib      0x000000010a7f9deb objc_exception_throw + 48 
    2 CoreFoundation      0x0000000108a87804 -[__NSArrayM objectAtIndex:] + 212 
    3 Votocast       0x0000000107dfd4de -[HomeView tableView:cellForRowAtIndexPath:] + 958 
    4 UIKit        0x000000010b6914f4 -[UITableView _createPreparedCellForGlobalRow:withIndexPath:willDisplay:] + 766 
    5 UIKit        0x000000010b69162c -[UITableView _createPreparedCellForGlobalRow:willDisplay:] + 74 
    6 UIKit        0x000000010b665c8a -[UITableView _updateVisibleCellsNow:isRecursive:] + 2799 
    7 UIKit        0x000000010b69a686 -[UITableView _performWithCachedTraitCollection:] + 92 
    8 UIKit        0x000000010b681344 -[UITableView layoutSubviews] + 224 
    9 UIKit        0x000000010b5ee980 -[UIView(CALayerDelegate) layoutSublayersOfLayer:] + 703 
    10 QuartzCore       0x0000000109ff1c00 -[CALayer layoutSublayers] + 146 
    11 QuartzCore       0x0000000109fe608e _ZN2CA5Layer16layout_if_neededEPNS_11TransactionE + 366 
    12 QuartzCore       0x0000000109fe5f0c _ZN2CA5Layer28layout_and_display_if_neededEPNS_11TransactionE + 24 
    13 QuartzCore       0x0000000109fda3c9 _ZN2CA7Context18commit_transactionEPNS_11TransactionE + 277 
    14 QuartzCore       0x000000010a008086 _ZN2CA11Transaction6commitEv + 486 
    15 UIKit        0x000000010b52e72e _UIApplicationHandleEventQueue + 7135 
    16 CoreFoundation      0x0000000108acf301 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 17 
    17 CoreFoundation      0x0000000108ac522c __CFRunLoopDoSources0 + 556 
    18 CoreFoundation      0x0000000108ac46e3 __CFRunLoopRun + 867 
    19 CoreFoundation      0x0000000108ac40f8 CFRunLoopRunSpecific + 488 
    20 GraphicsServices     0x000000010d4ebad2 GSEventRunModal + 161 
    21 UIKit        0x000000010b533f09 UIApplicationMain + 171 
    22 Votocast       0x0000000107e48d8f main + 111 
    23 libdyld.dylib      0x000000010cc0792d start + 1 
    24 ???         0x0000000000000001 0x0 + 1 
) 
libc++abi.dylib: terminating with uncaught exception of type NSException 

在viewWillAppear中,我從該數組中刪除所有對象並調用webservice。但在我從webservice得到響應之前,app崩潰到cellForRowAtIndexPath中的一行。你的小幫助將不勝感激。

編輯:

我注意到,應用程序時,我的tableview decelerationrate,我進入下一個畫面和復出的視頻列表顯示畫面只有崩潰。我沒有做過關於減速的任何類型的代碼。

+1

你的陣列是空的,這是它的崩潰。嘗試將數組中的值放在下面的方法中 - (void)viewWillAppear:(BOOL)animated { 它可以幫助您。 –

+1

哦......你的陣列沒有得到維護。在代碼中處理它。嘗試在ViewDidLoad中添加數組中的所有對象。還要檢查您在ViewWill/DidDisappear中使用數組所執行的操作。 –

+1

你從'numberOfRowsInSection'返回什麼值?當你刪除所有的數組值時,你是否立即在你的tableview中調用'reloadData'? – Paulw11

回答

1

你清除所有對象從數組在viewWillAppear方法但是,你是否重新加載tableview後。

因爲這會導致崩潰。你刪除所有對象,但tableview試圖轉到最後一個滾動索引。所以它會導致崩潰。

希望這會幫助你。

3

很明顯你的數據源代理工作不正常。如果您清空數據源使用的數組,則必須調用reloadData。當你得到新的數據時,你再次調用reloadData。

但是,您不應該以這種方式刷新數據。您應該顯示舊數據,直到新數據到達。

0

謝謝你們。我修好了它。我實際上是在viewDidLoad中分配數組,只是在viewWillAppear中從該數組中刪除對象。所以我保留我的數據,而不是在viewWillAppear中調用webservice。

相關問題