2013-05-16 22 views
0

我對這個問題感到無知,因爲我知道這很簡單。目標:在離開後保留一個視圖上的變量,然後返回。iOS在離開之後保留了一個視圖上的多個變量然後返回到它

例如:比方說,我們有的MainView類別查看和(擊鼓聲)ProjectView

應用打開的MainView它會顯示一個表格 - 用戶選擇他們希望選擇一個類別。這segue的他們到類別查看。一旦做出選擇,我將所選類別發送回MainView。通過

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 

這裏沒問題。 MainView接收變量並在「類別」部分中將所選類別顯示爲子文本。接下來,用戶想要選擇一個項目名稱(這也是一個預定義列表)。他們選擇項目,然後將該變量發送回MainView。 (現在有人可以向我解釋爲什麼當我回到主視圖時,之前持有'selected'類別的NSString變量現在爲空?

所以我的NSString selectedProject沒有被保留正確嗎?我應該在這裏做什麼正確的實施?或者我錯過了什麼?我真的很想了解發生了什麼,所以任何事情都會很有幫助。

的MainView接口

@interface MainViewController : UIViewController { 
     NSString *selectedProjectName; 
     NSString *selectedCategory; 
    } 

    @property (nonatomic, retain) NSString *selectedProjectName; 
    @property (nonatomic, retain) NSString *selectedCategory; 

    @end 

的MainView實施

@implementation MainViewController 
    @synthesize selectedCategory, selectedProjectName; 

,如果你需要它.. ProjectView實施

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 

    if ([[segue identifier] isEqualToString:@"masterSegue"]) { 
    MainViewController *vc = (MainViewController *)[segue destinationViewController]; 

    LogValues *lv = [LogValues alloc]; 

    lv.project = @"Test Project Name"; 
    vc.selectedProjectName = lv.project; 
    } 
    } 
+0

可能因爲您沒有「回到」主視圖,您可能正在創建一個新實例。你如何回到主視圖(什麼類型的segue)? – rdelmar

+0

返回我已將segue設置爲模態 –

回答

0

好的,你的問題是你沒有返回到同一個實例。你錯過了一個非常非常重要的事情 - 他們總是實例化新的視圖控制器。所以,當你使用模態segue去回到主視圖控制器時,你只需要創建一個新的控制器實例。你不應該在故事板中使用除了展開順序之外的任何東西來倒退(到更早的控制器)。放鬆是關於總是創建新實例的規則的例外。

所以,你有2個選擇。您可以使用unwind segue,這很好,因爲您仍然可以實現prepareForSegue將數據發送回目標控制器,或者根本不可以使用segue,並使用dismissViewControllerAnimated:completion:返回並使用代表發回數據。

+0

如果你不知道如何放鬆休息,請在這裏查看我的答案。 http://stackoverflow.com/a/16160239/1285133 – rdelmar

+0

這是偉人,欣賞解釋。我會考慮放鬆,我還沒有聽說過那些,不知何故。 –

-1

所以當然立即發佈後,我看到一個線程在我認爲有幫助的一面。解決方案是將值存儲在AppDelegate這工作正常。

但是我覺得還有其他方法可以實現相同的結果,而不必依賴AppDelegate,並且很樂意聽到其他解決方案。

+0

因此,如果這是一個不好的方法,即使它工作正常 - 您是否介意給出一個更合適的解釋。這是一個小型的內部應用程序,只有8個變量存儲,所以我沒有看到這樣做的危害。只是試圖學習最好的。 –

相關問題