重装tableView时出现奇怪的错误

时间:2015-08-25 15:29:38

标签: ios swift uitableview

我有一个非常通用的表格视图。

刷新时,它将从Parse获取对象列表。在dispatch_async队列中分析这些数据,然后刷新表视图。大多数时候,它没有问题,但有时候reloadData()崩溃

enter image description here

是否因为tableView在调用时重新加载数据而崩溃? (当tableview为init时,可能会自动调用reloadData)如何避免此错误? (控制台中没有错误消息)

修改 我试图放<table cellspacing="1" cellpadding="1" id="ProductTable" class="tablesorter"> <thead> <tr> <th class="reorder-false reorder-block-left">Product Name</th> <th class="">Description</th> <th class="filter-select filter-onlyAvail">Status</th> <th class="">Status Change Date</th> </tr> </thead> <tbody id="ProductList"> <tr class="ProductRows" id="P_1906"> <td ><a style="text-decoration:none" href="/Product/Index/1906">Product #1</a></td> <td><span class="">Test #1</span></td> <td><span class="">Active</span></td> <td><span class="time">2015/07/13 16:41:03</span></td> </tr> <tr class="ProductRows" id="P_1993"> <td ><a style="text-decoration:none" href="/Product/Index/1993">Test #2</a></td> <td><span class="">Test #2</span></td> <td><span class="">Backorder</span></td> <td><span class="time">2015/08/25 10:39:23</span></td> </tr> </tbody> </table> $("#ProductTable").tablesorter({ theme: 'blue', widthFixed: false, widgets: [ "zebra", "filter", "resizable" ], widgetOptions: { filter_childRows: false, filter_columnFilters: true, filter_filteredRow: 'filtered', filter_hideFilters: true, filter_ignoreCase: true, filter_liveSearch: true, filter_onlyAvail: 'filter-onlyAvail', filter_reset: 'button.reset', filter_saveFilters: true, filter_searchDelay: 300, filter_serversideFiltering: false, filter_startsWith: false, filter_useParsedData: false, filter_defaultAttrib: 'data-value' } }); ,但不起作用

enter image description here

2 个答案:

答案 0 :(得分:0)

当您的tableView(或您发送消息的任何对象)为零时,会发生这种情况。所以在你的异步调用在主队列上调度它之前的某个时候,你的tableView得到了反应。

查看此链接以获取一些信息:

http://www.touch-code-magazine.com/how-to-debug-exc_bad_access/

答案 1 :(得分:0)

在以下情况下,您将获得EXC_BAD_ACCESS错误:

您正在尝试访问未初始化的对象。

您正在尝试访问不再存在的对象。无论是被释放还是零。在ARC模式下,请确保获取要使用的对象的所有权。 您正在将消息传递给对象不理解的对象。

也可能发生错误的类型转换。就像下面的行,我试图用%@代替%d来访问一个int。

 int myAwesomeInt = 9;
 NSLog(@"%@", myAwesomeInt);

如何调试:

确定导致崩溃的原因。在查看特定视图控制器didLoad或委托方法或特定操作时是否崩溃。这通常有助于找到导致错误的对象。

(在你的情况下,看看你重新加载表时会发生什么。逐行进行堆栈跟踪,看看你的代码在重新加载过程中做了什么)

大多数时候,“NSZombies”可以帮助识别死亡对象。您可以通过编辑方案Product - &gt;来启用NSZombies。编辑方案 - &gt;诊断

如果仍然找不到根本原因,那么总是从子视图控制器向后转到父视图控制器,以查看需要保留哪个对象或需要正确传递哪些消息。 查看静态分析器和仪器以进行高级调试。

信用: The Basic Troubleshooting guide

希望这会有所帮助。祝你好运