Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 重新加载tableView时出现奇怪错误_Ios_Swift_Uitableview - Fatal编程技术网

Ios 重新加载tableView时出现奇怪错误

Ios 重新加载tableView时出现奇怪错误,ios,swift,uitableview,Ios,Swift,Uitableview,我有一个非常一般的桌子视图 刷新后,它将从解析中获取对象列表。在调度异步队列中分析这些数据,然后刷新表视图。大多数情况下,它没有问题,但有时重载数据()会崩溃 它崩溃是因为我调用tableView时它正在重新加载数据吗?(当tableview为init时,可能会自动调用重载数据)如何避免此错误?(控制台中没有错误消息) 编辑: 我尝试放置?,但不起作用 当您的tableView(或您将消息发送到的任何对象)为零时,会发生这种情况。因此,在异步调用将其发送到主队列之前的某个时候,您的tableV

我有一个非常一般的桌子视图

刷新后,它将从解析中获取对象列表。在调度异步队列中分析这些数据,然后刷新表视图。大多数情况下,它没有问题,但有时重载数据()会崩溃

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

编辑: 我尝试放置
,但不起作用


当您的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仍然存在相同的错误,这可能会告诉我们一些事情。我明天会尝试