2012-01-16 81 views
0

我想一些意見,例如和代碼大家如何劑量這個..發送數據

到目前爲止,我已經越來越細,使用的協議和委託出於傳遞信息備份通過navigaion控制器從視圖到視圖。

但是直到最近,我不得不通過控制器堆棧上的多個視圖傳遞一些數據,並且無法弄清楚如何通過代表和協議來實現這一點。我問了一些其他問題,什麼即時試圖做的,但我想拿出一個應用廣泛的解決方案,而不是幾個散列在一起的想法,纔剛剛做什麼,我需要..

Basicly什麼,我希望做的是就是這個

Navigation stack 
- First View 
-- second View 
--- Third View - current view. 

將數據從第三個傳遞到第一個視圖是目標。我知道如何彈出到第一個視圖控制器..我只是不知道如何從這個距離獲取信息...讓我回到atm的majour東西是我無法在第一視圖中聲明代理第三個視圖委託協議無法覆蓋應用程序。

+0

你有沒有考慮使用單身? – 0x8badf00d 2012-01-16 03:27:05

+0

我看過單身......但我沒有深入瞭解他們......這就是我現在正在計劃的......我需要找到適合我的應用程序設計的東西......我認爲協議和代表們會爲我做這件事,但我錯了。\ – 2012-01-16 03:30:53

回答

1

該怎麼辦呢,如果你的委託在三視圖定義,

在你的第三個觀點:

YourFirstViewController *fvc = [self.navigationController.viewControllers objectAtIndex:0]; 
    self.delegate = fvc; 
    [self.delegate yourMethodHere]; 

確保您firstviewcontroller符合協議

<thirdViewDelegate> 

並在第一個視圖中導入第三個視圖。

+0

沒關係在晚飯後做這件事..它現在有意義..希望我可以得到它的工作,因爲我愛我的代表..大聲笑 但是,我仍然認爲它將是有用的瞭解nsnotificatoncenter – 2012-01-16 04:09:27

+0

這工作完美.. 。抱歉沒有理解的麻煩開始..有些事情出錯了我試圖解決它,然後用凌亂的代碼endnig結束了..但這工作完美后,我解決了這些問題..非常感謝。 – 2012-01-16 21:20:29

0

我想使用observer patternNSNotificationCenter類和NSNotification類。你可以閱讀apple official document here。該文檔頁面中包含一個NSNotification Programming Topics鏈接。數據可以通過用戶信息的NSDictionary發送給觀察者。

通過觀察者模式,這些視圖控制器可以是鬆耦合。在開發項目時更改原始設計更靈活。

+0

是的我在另一個問題上已經聽說過這個消息。我現在要做一些閱讀。在檢測事件的方法方面,Kinda看起來好像有點像java。我會保持這個線程去看看我是否有其他答案,否則我會將你的標記標記爲正確。 – 2012-01-16 03:29:33

0

您是否考慮過將數據存儲在t他設備和分開訪問它。

– viewWillAppear: 
0

取決於你喜歡回傳,您可以使用一個Singleton, NSUserDefault, pass it via AppDelegate, use delegation pattern, or just use set of properties的數據:當視圖控制器調用您可以將所有的數據存儲在SQLite數據庫,並刷新數據。 The decision should be made by you according to the design and the requirement.假設您只想傳回一個字符串,您可以執行以下步驟,

在FirstViewController中聲明一個屬性。

@property (nonatomic, retain) NSString *thePassbackValue; 

在ThirdView中訪問FirstViewController的實例。

FirstViewController *fvc = [self.navigationController.viewControllers objectAtIndex:0]; 

設定值的財產,

fvc.thePassbackValue = @"someValue"; 

訪問值回到第一個視圖,

//在你的第一個觀點,

if(self.thePassbackValue != nil) 
{ 
//Use the value 
NSLog(@"the value %@", self.thePassbackValue); 
}