UITableView应用程序在cellForRow委托方法调用上崩溃

时间:2019-07-03 09:15:01

标签: ios swift

我在许多 UIViewControllers 中都有 UITableView 。该视图控制器从api加载一些数据,并将其放在self.data属性中。然后,表视图显示此数据。但是多次使用self.data之类的方法使用 IndexPath 来访问cellForRow:似乎会导致应用程序崩溃。

问题是这样的代码:

let item = data[indexPath.section][indexPath.row] 

我通过套接字事件刷新了这个视图控制器。 我认为它可以与滚动同时发生,也可以通过某种方式而不是依次调用加载新数据和重新加载表视图numberOfRows和cellForRow的方式发生。

我正在尝试使用诸如data[safe: indexPath.section]?[safe: indexPath.row]之类的可选选项,但是它增加了许多样板检查是否有数据,并且在教程,代码示例等中我还没有看到很多此类用法。

是否存在仅通过索引访问此数组的安全方法,并确保将有正确数量的元素并且不会发生崩溃?

更新:

现在我正在使用它来解决此问题,但似乎很奇怪,因为在大多数教程中,我还没有看到有人在进行类型检查

guard let model = data[safe: indexPath.section]?[safe: indexPath.row] else { return 0.1 }

guard let model = data[safe: indexPath.section]?[safe: indexPath.row] else { return UITableViewCell() }

1 个答案:

答案 0 :(得分:0)

如果要检查其是否有数据,我会更喜欢使用,也可以为模型属性分配默认值,或者为数据使用swiftyJSON以避免崩溃

if let section = data[indexPath.section]{
    if let data = section[indexPath.row]{
       item = data
     }
    }