【问题标题】:Strange crash using UITableView使用 UITableView 的奇怪崩溃
【发布时间】:2013-07-15 12:31:53
【问题描述】:

我有两个不同的UIViewControllers。

第一个NSMutableArray的订阅,它会在UITableView中加载。

第二个控制器做一些操作,并在部分代码中重新加载所有订阅。

当我打开第一个控制器时,我使用ViewDidAppear 方法重新加载表数据(订阅)。 在此操作期间,有时我的应用程序崩溃。我想是因为我在后台重新加载表格时订阅列表正在发生变化。

有没有办法即时重新加载表格并让用户滚动表格并同时重新加载它?

有关错误的更多信息

Uncaught exception: *** -[__NSArrayM objectAtIndex:]: index 3 beyond bounds [0 .. 2]

有 2 个订阅始终存在...TableView 尝试访问索引 3

有关错误的更多信息

【问题讨论】:

  • 您能否发布有关崩溃的更多信息、一些代码,以及可能有助于我们找到好的答案的内容?
  • numberOfRowsInSection 应该在每次更改数组时返回 [yourArray count] 并调用 [yourTable reloadData]
  • 发布您的tableView:numberOfRowsInSection: 实施。

标签: iphone ios objective-c uitableview


【解决方案1】:

订阅列表加载完成后调用tableview reload方法。 如果您使用单独的类来加载订阅,您可以使用委托通知您的主视图控制器订阅的加载已完成。否则你可以使用 NSNotificationCenter。

【讨论】:

    【解决方案2】:

    您需要将部分中的行数返回为数组中对象的总和。

    return [self.theArrayWithTheData count];
    

    您的问题是,当您使用不同的数组重新加载时,它会使用旧的行数,因此当您滚动过去时它会崩溃。

    【讨论】:

      【解决方案3】:

      在调用 [__NSArrayM objectAtIndex:] 之前,重新加载数据有助于避免崩溃,使用全局变量对行数进行计数检查。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-11-16
        • 2019-03-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-11-01
        • 2023-02-02
        相关资源
        最近更新 更多