2012-05-14 25 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中的方法,你已經更新後,您的選擇器陣列!

暖氣。

相關問題