如何确保标签栏控制器上的切换选项卡之间的核心数据检索?

时间:2012-05-14 22:43:34

标签: iphone core-data tabbarcontroller

有人可以帮帮我吗?

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

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

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

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

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

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

是否有另一种方法在此之前触发,以便在Tab键开关和选择器显示之前读取保存的数据?

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

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

有什么想法吗?

干杯,

燃气。

布里斯托尔 英国。

4 个答案:

答案 0 :(得分:0)

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

构建视图控制器视图时调用

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

在跟踪了这些人的建议之后,我放置断点并逐行逐步执行代码以确定正在执行的代码以及何时执行。

我追踪到选择器调用的重要方法,只是在应用程序启动时被触发。当我在标签之间切换时,即使数据被输入到选择器数据数组中,选择器也没有重新加载。

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

第一次搜索让我回到了这里的旧帖子,其中一位论坛成员遇到了同样的问题。

一小段代码让我做车轮!!!

我遵循了他的建议并放置了这条线..... self.picker.delegate = self;在viewWillAppear方法......现在一切都在标签交换机之间更新!!

我可能不得不向这里的一位大师低头解释为什么这条线会产生重大影响.......对我来说,了解它是非常重要的对我来说是一个启示。

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

任何人都可以解释为什么这句话使得新手可以理解的选择器更新了吗?......我真的很感激.......

燃气。

答案 3 :(得分:0)

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

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

[self.projectPicker reloadAllComponents];

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

确保在更新选择器阵列后将其放在viewWillAppear方法的末尾!

燃气。