2012-05-14 28 views
0

有人可以帮我吗?如何确保标签栏控制器上切换标签之间的核心数据检索?

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

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

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

该代码工作正常,但它的时候,然后阅读发生这是问题。

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

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

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

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

正如我所说的,数据正在写入和检索罚款....只是,我必须停止模拟器,并开始填补选择器。

有什么想法?

干杯,

暖气。

布里斯托尔 英格兰。

回答

0

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

viewDidLoad在构建视图控制器的视图时调用(构建于loadView或从nib文件“加载”)。由于视图必须先加载才能显示,您可以在视图第一次出现之前调用viewDidLoad,但不会在每次出现视图之前调用该视图。如果视图已经加载,则不需要再次加载。但是,如果应用程序在视图不可见时收到内存警告,则它将被卸载,并在需要重新显示时再次加载。因此viewDidLoad可能会在控制器的使用期限内被调用很多次,但您不能依赖它在视图出现时被称为非常时间,这就是viewWillAppear/viewDidAppear的用途。

+0

非常感谢你们。我试图把在viewWillAppear中检索代码。 –

+0

非常感谢你们。我试图把检索代码放在viewWillAppear中,但它没有更新我的选择器。正如我所说的,代码可以工作,但只有在viewDidLoad激发时才会启动。只是有一个想法,选择器只加载一次设置?如果我可以在viewWillAppear触发时证明picker数组有更新的数据,那一定是因为picker代码只发生一次? –

+0

不幸的是我从这里看不到你的屏幕。我可以告诉你何时发送视图控制器生命周期消息,但需要更多的细节来确定为什么添加到这些方法的代码没有按预期行事。如果您要1.显示您的代码,请说明您希望发生的事情,并解释实际发生的事情,这将会很有帮助。描述你在UI中看到的是一个好的开始,但是如果你可以设置一个断点并描述对象的状态,那么你对此感兴趣将会消除更多的猜测。 – Jonah

0

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

0

.....在其他新手使用搜索引擎寻找与他们有问题有关的线索的精神,我想我会张贴这最后的条目,以帮助任何人在未来可能会发现这!

遵循这些家伙的建议之后,我放置了断点并逐行遍历代码,以确定正在执行什么代码以及何时执行代码。

我追踪到选择器所调用的重要方法只是在应用程序启动时被解雇。当我在选项卡之间切换时,即使数据输入到选取器数据数组中,选取器也不会重新加载。

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

第一次搜索将我返回到这里的旧线程,其中一个论坛成员有同样的问题。

一个非常小的代码行让我做车轮!

我跟着他的意见,并把行..... self.picker.delegate = self;在viewWillAppear方法中......一切现在都在标签开关之间更新!

我可能不得不屈服于上师之一来解释为什么这条线会产生重大影响.......这对我来说很重要,因为这对我来说是一个启示。

(我取代选择器与我pickername)

任何人都可以提供的,为什么这种说法在概念上是新手可以理解做出的选择器更新一个解释?......我会很感激.... 。

Gaz。

0

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

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

[self.projectPicker reloadAllComponents]; 

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

请务必将其放置在年底在viewWillAppear中的方法,你已经更新后,您的选择器阵列!

暖气。

相关问题