0

有人可以帮我吗??

好的.....我的项目进展顺利。有一个屏幕/数据更新的小问题。

我有标准的 5 选项卡 TabBarController 工作正常。我的一个选项卡将文本字段中的数据输入核心数据中的实体属性。到目前为止一切都很好。

当我切换到另一个选项卡时,我会从数据库中读取属性并输入到选择器中。

代码工作正常,但问题是在读取时发生。

在标签 3 上输入数据并写入数据后,我切换到标签 1 并且选择器没有更新。直到我停止模拟器并再次运行时,数据显示在选项卡 1 的选择器中。

目前,我有读取数据库中的属性并更新 viewDidLoad 方法中的选择器数组的代码。

在此之前是否有另一种方法可以在选项卡切换和选择器显示之前读取我保存的数据?

我还尝试将数据库检索代码放在 viewWillAppear 方法中,认为它会在视图出现之前触发,读取我的数据,更新选择器数组然后显示但没有!!!

正如我所说,正在写入和检索数据......只是我必须停止模拟器并启动它来填充选择器。

有什么想法吗?

干杯,

天然气。

英国布里斯托尔。

4

4 回答 4

0

每次视图出现时都会调用 viewWillAppear 方法。所以这是检索数据的正确位置。

于 2012-05-15T06:30:45.503 回答
0

viewWillAppear:(或viewDidAppear:)可能是这种行为的正确位置,请调查并解释为什么在这种情况下看不到预期的行为。

viewDidLoad在构造视图控制器的视图时调用(内置loadView或从 nib 文件“加载”)。由于必须先加载视图才能显示它,因此您可以指望在viewDidLoad视图首次出现之前被调用,而不是在每次出现之前调用。如果视图已经加载,则不需要再次加载。但是,如果应用程序在视图不可见时收到内存警告,它将被卸载,然后在需要重新显示时再次加载。因此viewDidLoad,在控制器的生命周期中可能会被多次调用,但你不能依赖它在视图出现的时候被调用,这就是viewWillAppear/viewDidAppear的用途。

于 2012-05-15T00:00:50.340 回答
0

.....本着其他新手使用搜索引擎查找与他们遇到的问题相关的线程的精神,我想我会发布这个最后的条目来帮助将来可能会找到这个的任何人!!!

在听从了这些人的建议后,我设置了断点并逐行逐行执行代码以确定正在执行的代码以及何时执行。

我发现选择器调用的重要方法仅在应用程序启动时被触发。当我在选项卡之间切换时,即使将数据输入到选择器数据数组中,选择器也不会重新加载。

它确实具有讽刺意味,因为我在此之后改进了我的搜索,搜索“重新加载选择器视图数据”。

第一次搜索让我回到了这里的一个旧线程,一个论坛成员也遇到了同样的问题。

一小行代码让我做了侧手翻!!!

我听从了他的建议并放置了线路.....self.picker.delegate=self; 在 viewWillAppear 方法中......现在所有内容都在选项卡切换之间更新!

我可能不得不向这里的一位大师鞠躬,以解释为什么这条线会产生重大影响……知道这对我来说很重要,因为这对我来说是一个启示。

(我用我的选择器名称替换了选择器)

谁能解释一下为什么这个声明以新手可以理解的方式更新了选择器?...我真的很感激.....

天然气。

于 2012-05-15T21:33:06.647 回答
0

......好吧......关于这个问题的更新!

更新我在 viewWillAppear 方法中使用的选择器的方法是使用

[self.projectPicker reloadAllComponents];

(其中 projectPicker 是您的选择器的名称。

确保在更新选择器数组后将它放在 viewWillAppear 方法的末尾!

天然气。

于 2012-05-16T20:50:46.527 回答