2012-12-13 171 views
0

我有一個簡單的主 - 細節應用程序,我試圖在一個視圖控制器之間傳遞數據到下一個。我有一個視圖控制器,作爲模式視圖控制器呈現,其中用戶從UIPickerView中選擇一個選項,並根據他們選擇哪一行來設置字符串。但是,當視圖控制器被解散時,該字符串爲空。當用戶選擇模式視圖控制器上的登錄按鈕時,它會發布通知,以便主視圖控制器使用由UIPickerView設置的字符串啓動方法,但由於該字符串爲空,因此它保持失敗。我已經將parserURL設置爲每個視圖控制器以及ivars中的屬性。試圖在兩個視圖控制器之間傳遞數據

下面是設置在模態視圖控制器中的字符串代碼:

-(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component { 

    MasterViewController *master = [[MasterViewController alloc] init]; 

    if (row == 0) { 
     [self.dropdownButton setImage:[UIImage imageNamed:@"dropdown"] forState:UIControlStateNormal]; 
    } 
    if (row == 1) { 
     [self.dropdownButton setImage:[UIImage imageNamed:@"hbm"] forState:UIControlStateNormal]; 
     [master setParserURL:@"http://98.246.50.81/firecom/xml/HBM.xml"]; 
     NSLog(@"URL = %@", master.parserURL); 
    } 
    if (row == 2) { 
     [self.dropdownButton setImage:[UIImage imageNamed:@"hwh"] forState:UIControlStateNormal]; 
     [master setParserURL:@"http://98.246.50.81/firecom/xml/HWH.xml"]; 
    } 
} 

登錄按鈕IBAction爲:

-(IBAction)loginButton:(id)sender { 

    [self dismissViewControllerAnimated:YES completion:nil]; 
    [[NSNotificationCenter defaultCenter] postNotificationName: @"login" object: nil]; 

} 

回答

1

的問題是,你沒有設置你的主控實例的字符串但在另一個您剛剛爲該場合初始化的實例中。


有很多方法可以實現這一點。取決於應用程序的所有架構。
最簡單的,但不是一個很好的辦法,將做到這一點,當你在你的主人創造您的詳細視圖控制器
DetailVC *dVC = [[DetailVC alloc] initWithNib:@"DetailVC" bundle:nil];
dVC.masterReference = self;

然後在您的詳細視圖控制器,你可以直接引用它像這樣:self.masterRefence這將指向您的original主視圖控制器。

+0

我該如何在我的主實例上設置它? –

0

您是否將.h文件導入了編碼頁面?

+0

是的,我已經導入它 –

0

我相信在視圖控制器之間傳遞數據的最好方法是通過核心數據。你應該研究這個功能在ios中是如何工作的,並且從長遠來看它會對你有所幫助。

相關問題