Objective c UITableview抛出一个“;“行数无效”;重新加载数据调用时出错,但仅适用于iPad 1而非iPad 2

Objective c UITableview抛出一个“;“行数无效”;重新加载数据调用时出错,但仅适用于iPad 1而非iPad 2,objective-c,ios,multithreading,ipad,thread-safety,Objective C,Ios,Multithreading,Ipad,Thread Safety,我有一个iOS应用程序,简而言之,它使用UITableView和几个按钮来更改表的内容。在开发的早期,我遇到了一个错误,即在重新加载数据调用之前和之后,行数不一致,但后来发现我做得不正确 然而,现在我从一个测试人员那里得到一份报告,他的iPad1正在崩溃,看着堆栈跟踪,我可以看到同样的错误,如上所述,正在发生。但所有其他iPad2测试仪似乎工作正常,它们都使用相同的数据集来填充表格 下面是我填充tableview的方式: [tableviewController.data removeAllOb

我有一个iOS应用程序,简而言之,它使用UITableView和几个按钮来更改表的内容。在开发的早期,我遇到了一个错误,即在重新加载数据调用之前和之后,行数不一致,但后来发现我做得不正确

然而,现在我从一个测试人员那里得到一份报告,他的iPad1正在崩溃,看着堆栈跟踪,我可以看到同样的错误,如上所述,正在发生。但所有其他iPad2测试仪似乎工作正常,它们都使用相同的数据集来填充表格

下面是我填充tableview的方式:

[tableviewController.data removeAllObjects] //Delete the old data. Tableviewcontroller is the delegate for self.tableview
[self.tableview performSelectorOnMainThread:@selector(reloadData) withObject:nil waitUntilDone:NO];
[tableviewController setData:[newDataSetArray mutableCopy]]; //Copy over a new dataset array
[self.tableview performSelectorOnMainThread:@selector(reloadData) withObject:nil waitUntilDone:NO];
如果有人知道为什么会发生这种情况,并能指出这一点,我将不胜感激

编辑: 还有一些细节。在听到这个问题后,我们让测试人员删除应用程序的本地副本,并获取最新版本。
此外,他和其他测试人员都在运行iOS 5.1.1,就我所知,唯一不一致的是硬件版本。但这没有意义://p>我的想法是,为什么不这样做:

[tableviewController setData:[newDataSetArray mutableCopy]]; //Copy over a new dataset array
[self.tableview performSelectorOnMainThread:@selector(reloadData) withObject:nil waitUntilDone:NO];
您实际上不需要清除旧的并重新加载,然后设置新的并重新加载

但是,我会小心线程。看起来这段代码不是从主线程运行的,这意味着表的数据源可能与数据的设置冲突。另一种方法是在主线程上敲打整个批次,如下所示:

dispatch_async(dispatch_get_main_queue(), ^{
    [tableviewController setData:[newDataSetArray mutableCopy]]; //Copy over a new dataset array
    [self.tableview reloadData];
});

但我也很困惑的是,如果重新加载的表视图是self.tableview,那么什么是
tableviewController
self
是否与
tableviewController
不同?

是否有可能您的iPad 1用户没有更新他的应用程序?代码不应该在不同的iPad上运行,不管是哪一代。这是我最初的想法,但结果证明他有最新版本。我们甚至让他删除本地版本,并通过我们用于向测试人员分发应用程序的服务获取新版本。我将为这个问题添加更多细节,以便提供一些见解。Thx虽然。为什么我没有注意到可能的比赛我不知道。谢谢你,伙计!已经向测试人员推出了一个新版本,我正在等待他们的反馈。这可能与iPad1上较慢的硬件有关。一旦我得到确认,我会尽快标记为正确。