Ios 重新加载tableView时出现奇怪错误
我有一个非常一般的桌子视图 刷新后,它将从解析中获取对象列表。在调度异步队列中分析这些数据,然后刷新表视图。大多数情况下,它没有问题,但有时重载数据()会崩溃 它崩溃是因为我调用tableView时它正在重新加载数据吗?(当tableview为init时,可能会自动调用重载数据)如何避免此错误?(控制台中没有错误消息) 编辑: 我尝试放置Ios 重新加载tableView时出现奇怪错误,ios,swift,uitableview,Ios,Swift,Uitableview,我有一个非常一般的桌子视图 刷新后,它将从解析中获取对象列表。在调度异步队列中分析这些数据,然后刷新表视图。大多数情况下,它没有问题,但有时重载数据()会崩溃 它崩溃是因为我调用tableView时它正在重新加载数据吗?(当tableview为init时,可能会自动调用重载数据)如何避免此错误?(控制台中没有错误消息) 编辑: 我尝试放置?,但不起作用 当您的tableView(或您将消息发送到的任何对象)为零时,会发生这种情况。因此,在异步调用将其发送到主队列之前的某个时候,您的tableV
?
,但不起作用
当您的tableView(或您将消息发送到的任何对象)为零时,会发生这种情况。因此,在异步调用将其发送到主队列之前的某个时候,您的tableView被解除了 有关某些信息,请查看此链接:
在以下情况下,您将出现EXC\u BAD\u访问错误: 您正在尝试访问未初始化的对象 您正在尝试访问一个不再存在的对象。要么是被释放,要么是零。在ARC模式下,确保您拥有要使用的对象的所有权。 您正在向对象传递一条对象不理解的消息 这种情况也可能发生在糟糕的排版上。就像下面几行一样,我试图用%@而不是%d访问int
int myAwesomeInt = 9;
NSLog(@"%@", myAwesomeInt);
如何调试:
确定是什么导致了这次车祸。它是在特定视图控制器的视图加载时崩溃的,还是在委托方法或特定操作中崩溃的。这通常有助于找到导致错误的对象
(在您的例子中,请查看在重新加载表时具体发生的情况。逐行执行堆栈跟踪,并查看代码在重新加载期间的执行情况)
大多数情况下,“僵尸”可以帮助识别死物。您可以通过编辑方案产品->编辑方案->诊断来启用NSZombies
如果仍然找不到根本原因,请始终从子视图控制器向后转到父视图控制器,查看需要保留的对象或需要正确传递的消息。
查看静态分析仪和仪器以进行高级调试
学分:
希望这有帮助。祝你好运我认为添加/删除单元格是更新,你是否在重新加载之前取消分配表视图?@JAL不,此函数在UITableViewController中,但这是在UITableViewController中编写的,他们不保证tableView不为零吗?swift将使var成为可选的,当它可能为nilOK时,我只是重新阅读了你的帖子,看到你认为这可能是因为它在调用它,而tableView仍在重新加载,尝试将重新加载的数据延迟一秒钟,看看这是否解决了问题(为tableView提供在调用reloadData之前完成重新加载的时间。)如果仍然出现相同的错误,我会检查是否可能正在释放UITableViewController,或者以某种方式实例化一个新的UITableViewController以导致此控制器被释放,因为只有在向堆中不存在的对象发送消息时才真正调用它。我尝试调用“reloadData()”多次,第一次调用崩溃或无。因此,我的假设是错误的。当我删除主_队列时,似乎没有发生错误。因此,当您直接在主队列上调用它而不是分派它时?是否需要分派它?您似乎只是异步分派它,然后使用它立即在主队列上调用它main_queue,为什么不首先在主队列上调用它呢?因为我必须从服务器获取它,然后执行“post=fetchedObjects”。它们在另一个队列中运行。当我开始运行应用程序时会发生崩溃,tableView开始加载。因此:1.我相信UITableViewController保证tableView存在,2.我无法取消分配self.tableView。3.重新加载数据()应该理解只是出于好奇,当您用NSLog语句替换self.tableview时会发生什么?如果NSLog仍然存在相同的错误,这可能会告诉我们一些事情。我明天会尝试