【问题标题】:Strange entanglement between two UITableViews in XCode5XCode5 中两个 UITableView 之间的奇怪纠缠
【发布时间】:2026-01-29 18:55:01
【问题描述】:

解释前的总结

就好像故事板将表格视为指向单个实例的指针,仅仅是因为我通过故事板复制和粘贴。我在这里记录这个部分是为了提醒自己(我是 Stack Overflow 的*用户)和对他人的警告。当然,我想知道是否有一种简单的方法可以真正解开这两者,而无需从头开始重新创建一个 ViewController。 请继续阅读以获取解释。

背景故事

首先,我使用情节提要创建了 CatUIViewController。我连同.h.m 文件一起完成了整个工作。然后,需要一个类似的用于 Dogs 的 ViewController,我将一个空的 ViewController 从 Object Library 拖放到情节提要上,然后我将整个 UITableView 从 CatUIViewController 复制并粘贴到 DogUIViewController。然后当然我对.h.m 文件做了同样的事情。 CatUIViewController 和 DogUIViewController 之间真正的唯一区别是 Cat 的标题中有两个按钮,而 dog 有一个 UIImageView,以及两个标题共享的其他数据。

很自然,当我粘贴到 Dog 等效项中时,Xcode 会为我完成所有连接。它自动连接所有的 IBOutlets 和 IBActions:Xcode 的一个很好的特性。

更多细节

两个表格视图都有背景图片。并且从 Cat 到 Dog 的导航是可能的,因为我的应用程序使用的是 UITabBar——两者之间不存在其他链接。此外,当 Cat 引导其 Tab 时,Dog 位于其 Tab 的 NavigationController 中。

问题

问题是这样的:如果我在 DogUIViewController 并单击选项卡转换到 CatUIViewController,转换后 DogUIViewController 的背景显示为 CatUIViewController 的背景。事实上,如果我访问 DogUIViewController 然后导航到任何其他页面……第二次我单击 CatUIViewController 的选项卡,它神秘地首先显示 DogUIViewController 的数据,然后在大约 1 秒后切换到正确的数据。另一个奇怪的是,反过来也是一样的。

我一直在调查代码以查看可能是什么原因,但到目前为止我一无所获。就好像纠缠发生在 Xcode 中没有暴露给我的层:我查看了 Connections Inspector、.h.m 文件,但到目前为止我找不到任何东西。我希望这是我的一个简单的疏忽,所以我继续挖掘。但以防万一它不是并且其他人已经解决了类似的问题,我在这里问。

【问题讨论】:

  • 问问题的方式真是太美了。太糟糕了,答案可能对你没有任何好处。看起来这是一个故事板错误,并且有很多这样的错误。无论如何,阅读愉快。
  • 您可以在 Xcode 中控制或右键单击右舷并将其显示为“源” - 这将显示底层 XML 文档,并可能让您查看是否有不应该出现的东西
  • @Paulw11 有什么特别值得我寻找的吗?没有什么能让我兴奋。到目前为止所有的 id 都是不同的。
  • 故事板的工作方式并没有什么神奇之处——当你实例化一个 VC 时,适当的块被传递给 initWithCoder 方法,所以如果你在你的“狗”场景那么您的问题可能是在运行时视图控制器层次结构中的损坏 - 如果您操作标签栏的 vc 属性直接仔细查看该代码。

标签: ios iphone uitableview storyboard xcode5


【解决方案1】:

虽然您不仅复制并粘贴了 UITableView,还复制并粘贴了 .h.m 文件,但出错的可能性比比皆是。但我特别感兴趣的是你提到的差异只存在于头文件中。这对我来说意味着错误的可能原因是您的数据源。无论您在哪里获取数据,都需要一秒钟的时间,以便新数据延迟到足以让旧数据显示出来。所以我以一个问题结束我的回答:你是如何获取数据的?你在缓存数据吗?你在打扫物业吗?例如,如果您使用服务器通知来更新视图控制器,则不推荐使用 viewDidUnload,因此我不会使用它来取消注册通知。在任何情况下,您都是您的数据源。

【讨论】:

  • 我的数据源确实被共享了。这是相同的服务调用,但参数不同。是的。这是一个很大的。