先总结再解释
就好像 Storyboard 将表格视为指向单个实例的指针,仅仅是因为我在 Storyboard 中进行了复制和粘贴。我在这里记录下来,部分是为了提醒自己(我是 Stack Overflow 的狂热用户),同时也是对其他人的警告。当然,我想知道是否有一种简单的方法可以真正分离这两者,而不必从头开始重新创建其中一个 ViewController。 请继续阅读以获取解释。
背景故事
首先,我使用 Storyboard创建了 CatUIViewController。我连同 .h
和 .m
文件一起完成了整个过程。然后,需要一个类似的 Dogs ViewController,我将一个空的 ViewController 从对象库拖放到 Storyboard上,然后我将整个 UITableView 从 CatUIViewController 复制并粘贴到 DogUIViewController。然后我当然对 .h
和 .m
文件做了同样的事情。实际上,CatUIViewController 和 DogUIViewController 之间的唯一区别是 Cat 在其标题中有两个按钮,而 dog 有一个 UIImageView,以及两个标题共享的其他数据。
自然地,当我粘贴到 Dog 等效项时,Xcode 会为我完成所有连接。它自动连接所有 IBOutlets 和 IBActions:Xcode 的一个很好的特性。
更多细节
两个 TableView 都有背景图片。从 Cat 到 Dog 的导航是可能的,因为我的应用程序正在使用 UITabBar——两者之间不存在其他链接。此外,虽然 Cat 领导其 Tab,但 Dog 在其 Tab 的 NavigationController 中处于领先地位。
问题
问题是这样的:如果我在 DogUIViewController 中并单击选项卡以转换到 CatUIViewController,转换后 DogUIViewController 的背景显示为 CatUIViewController 的背景。事实上,如果我访问 DogUIViewController 然后导航到任何其他页面……第二次我单击 CatUIViewController 的选项卡,神秘地它首先显示 DogUIViewController 的数据,然后大约 1 秒后切换到正确的数据。另一个奇怪之处在于,反过来也同样成立。
我一直在调查代码以查看可能的原因,但到目前为止我一无所获。就好像纠缠发生在 Xcode 中未向我公开的层:我查看了 Connections Inspector、.h
和 .m
文件,但我找不到到目前为止的任何事情。我希望这是我的一个简单疏忽,所以我会继续挖掘。但以防万一它不是并且其他人已经解决了类似的问题,我在这里问。
最佳答案
虽然您不仅复制并粘贴了 UITableView,还复制并粘贴了 .h
和 .m
文件,但出错的可能性比比皆是。但我特别感兴趣的是,您提到了仅存在于头文件中的差异。这对我来说意味着错误的可能原因是您的数据源。无论您在哪里获取数据,都需要一瞬间,以便新数据的延迟刚好足以让旧数据显示出来。所以我以一个问题结束我的回答:你是如何获取你的数据的?你在缓存数据吗?你在打扫属性(property)吗?例如,如果您正在使用服务器通知来更新您的 View Controller ,则不推荐使用 viewDidUnload,因此我不会使用它来注销通知。在任何情况下,您都在您的数据源处。
关于ios - XCode5 中两个 UITableView 之间的奇怪纠缠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25538152/