2011-05-07 85 views
1

我有一個iPhone應用程序,它有一個父視圖控制器與一些數據。我點擊其中一行,並將一個Detail VC推入堆棧,在那裏我想編輯父級的數據。當我彈出Detail視圖時,Parent視圖應該會看到更改後的數據。iPhone:如何在父視圖控制器和細節視圖控制器之間來回傳遞數據

實現此目的的最簡單和最好的方法是什麼?我知道我可以:a)在視圖控制器鏈上直接編輯父數據( - messy),b)在彈出Details視圖時使用代表進行回調( - 繁瑣),c)發送通知( - 工作太多) 。

必須有一些更簡單的方法,可能使用屬性傳遞從父視圖到細節視圖完全相同的指針,以便細節視圖與父項相同地處理相同的數據?這樣,Detail視圖在彈出堆棧時不需要執行任何操作。

回答

2

是,它的所謂的模型 - 視圖控制器。你真的希望你的數據被存儲到另一個類中,稱爲模型。需要了解模型更改的對象應該被告知對其的更改,這可以通過關鍵值觀察或委派來完成。在這種情況下,您的父視圖控制器將訂閱模型中的更改。當數據改變時,父視圖控制器可能會被通知,並刷新他的表格。如果父項目前不可見,則可以掛起這些更新並在顯示時更新父項。

0

在我正在研究的項目中,我創建了一個名爲「DataServices」的類。該DataService的目標是「在applicationDidFinishLaunching」中實例化一次:

ds = [[DataServices alloc] init]; 
ds.managedObjectContext = self.managedObjectContext; 
[ds initialize_data]; 

需要數據的任何模塊聲明是這樣的:

extern DataServices *ds; 

...而且是免費爲需要訪問共享的應用數據。讀。寫。修改。抽象是完整的。我可以做任何我想要的數據的編碼,存儲和來源,並且需要數據服務的各種模塊的接口不會改變。爲我所做的工作正常工作。也許這可能適合你。

只要檢測到從班級到班級的變化。 DataServices中有一個名爲「modified」的標誌。該標誌在例如顯示可以進行更改的新視圖控制器之前被清除。 DataServices中的任何「set」或「update」成員函數都會設置此標誌。有了這個:

if(ds.modified) 
{ 
// Do what you have to do if data is modified 
} 

標誌可以爲設置組的要求,你不一定需要有一個單一的一個尺寸適合所有的修改標誌設置。標誌也可能很複雜。如果特定數據達到閾值,您可能會觸發一個標誌,等等。

相關問題