【问题标题】:UITableViewCell not being refreshed upon display?UITableViewCell 在显示时没有被刷新?
【发布时间】:2010-11-22 12:11:03
【问题描述】:

我对 UITableView/UITableViewCells 有一个非常奇怪的问题。

我有一个普通样式的 UITableView,它显示一个对象列表(对于参数,比如说 MenuItemsViewController),它有一个名为 ItemViewController 的子对象。当用户在 MenuItemsViewController 中选择一个对象时,MenuItemsViewController 只会更改 ItemViewController 上的 menuItem 属性。

当用户选择他们的第一个项目时,一切都显示得很好。但是,在随后选择其他项目时,ItemViewController 的第一部分中的数据不会改变 - 即它仍然显示第一个项目的属性。我在 tableView:cellForRowAtIndexPath:tableView:willDisplayRowAtIndexPath: 方法的末尾设置了断点,并且在显示单元格时查询它们显示 textLabel/detailTextLabel 属性都是正确的 - 即在内部它们具有它们应该的状态。但是,UITableView 仍然没有显示正确的信息。

感谢任何帮助 - 这个问题让我发疯了。我现在正在录制视频并将其上传到 YouTube 以进行演示,因为这是一个非常奇怪的问题,我认为人们可能会误解我在问什么。

编辑:和视频 - http://www.youtube.com/watch?v=AwHTaHCQtX8&feature=youtube_gdata_player

编辑#2:所以,这太疯狂了:经过 6 小时的调试和测试,结果发现动画问题是由调用错误的 NSManagedObject 上的 getter 引起的......我有 no 知道为什么。没有任何。我想现在这是一个核心数据问题,所以我将其添加为标签。

【问题讨论】:

    标签: cocoa-touch uitableview core-data ios uikit


    【解决方案1】:

    您必须告诉表格视图其内容已更改。可能的解决方案是将[self.tableView reloadData] 添加到ItemViewController 的viewWillAppear: 方法中。

    但我强烈建议您覆盖 menuItem 属性并添加代码以分别使用 reloadRowsAtIndexPaths:withRowAnimation:/reloadRowsAtIndexPaths:withRowAnimation: 重载已更改的单元格/部分。

    【讨论】:

    • 我的代码如问题中所述正确生成单元格 - 再次调用 reloadData 无济于事
    • 能否展示更新和加载 ItemViewController 实例的 MenuItemsViewController 方法的代码?
    【解决方案2】:

    当您在第一个表视图中选择一个项目时,它应该创建一个新的子视图控制器并将 NSManagedObject 传递给子视图以进行填充。当您从客户端弹出回父级时,子级应该被释放。我怀疑您正在尝试重新使用子视图控制器(基于您的视频),否则您不会遇到此问题。

    所以让我们从那里开始。你能确认这实际上是你在做什么吗?如果没有,为什么不呢?

    【讨论】:

      猜你喜欢
      • 2010-10-05
      • 1970-01-01
      • 2015-05-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多