代码之家  ›  专栏  ›  技术社区  ›  refulgentis

UITableViewCell在显示时没有刷新?

  •  1
  • refulgentis  · 技术社区  · 14 年前

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

    我有一个样式简单的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引起的……我已经 知道为什么。没有。我想这是一个核心数据问题,所以我把它作为一个标签。

    2 回复  |  直到 14 年前
        1
  •  0
  •   Kentzo    14 年前

    必须告诉to table视图其内容已更改。可能的解决方案是 [self.tableView reloadData] viewWillAppear: ItemViewController的方法。

    但我强烈建议您重写menuItem属性,并使用 reloadRowsAtIndexPaths:withRowAnimation: / 重新加载rowsatindexpaths:withRowAnimation: ,分别是。

        2
  •  0
  •   Marcus S. Zarra    14 年前

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

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