2013-11-25 34 views
2

問題已解決!請參閱底部的代碼。接收器MainVIewController沒有segue iOS

我想在兩個控制器之間傳遞一些數據。我有加載GoogleMap的MainViewController類。點擊每個GMap標記的自定義信息窗口,我想打開新的窗口,並顯示地點詳情。 我的故事板: Storyboard

Segue公司被評爲:showPlaceDetails:

Segue

幾種方法寫着:

- (void) mapView:(GMSMapView *)mapView didTapInfoWindowOfMarker:(GMSMarker *)marker { 
    [self performSegueWithIdentifier:@"showPlaceDetails" sender: nil]; 
} 

(我還試圖用sender: [marker snippet])。

我prepareForSegue方法:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 
    if ([segue.identifier isEqualToString:@"showPlaceDetails"]) { 
     //[[segue destinationViewController] setDelegate:self]; 
     PlaceDetailsViewController *destViewController = segue.destinationViewController; 
     //Pass some data 
    } 
} 

但我得到的消息: 終止應用程序由於未捕獲的異常 'NSInvalidArgumentException',原因: '接收器(RelaxInKZViewController)具有標識符沒有賽格瑞 'showPlaceDetails''

我做下列步驟操作:

  1. 添加新的視圖控制器上STOR yboard。
  2. 添加名爲PlaceDetailsViewController的Objective-C類。
  3. 更改自定義類新加入的VC爲「PlaceDetailsViewController」
  4. 添加該代碼
  5. 清除模擬器的數據和清潔工程

並沒有什麼。我希望你能幫助我:) Thx,Artem。


Mr_bem一直勸我拒絕塞格斯和使用pushViewController方法。這很好!

UIStoryboard *iPhoneStoryboard = [UIStoryboard storyboardWithName:@"Main_iPhone" bundle:nil]; 
    PlaceDetailsViewController *destViewController = [iPhoneStoryboard instantiateViewControllerWithIdentifier:@"PlaceDetailsViewController"]; 
    destViewController.placeData = marker.placeData; 
    [self.navigationController pushViewController:destViewController animated:NO]; 

回答

3

您使用的是推SEGUE,這隻能是一個navigationController進行,如:

[self.navigationController performSegueWithIdentifier:@"showPlaceDetails" sender: nil]; 

注意您應該將視圖控制器,是推動一個前有一個導航控制器。

或者,如果你願意,你可以改變它的類型爲Modal,一切都應該爲你工作大(Y)

UPDATE

好了,這裏是我的建議,刪除SEGUE,使您PlaceDetailsViewController到PlaceDetailsViewController來自IB的storyboardID,並添加以下代碼,而不是

- (void) mapView:(GMSMapView *)mapView didTapInfoWindowOfMarker:(GMSMarker *)marker { 
     PlaceDetailsViewController *destViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"PlaceDetailsViewController"]; 
[self.navigationController pushViewController:destViewController animated:YES] 
se 
    } 

此必須努力!大聲笑!

+0

您是否已將navigationController添加到您的storyBoard中,然後使RelaxInKZViewController成爲其根視圖控制器?如果你這樣做,我提供的代碼應該工作..或者只是改變模式的segue的類型。 是的,你在做什麼是正確的,只是一個小錯誤,一旦修復,它應該是真棒! – Albara

+0

按住控制鍵,然後從導航控制器拖動到您的RelaxInKZViewController,然後選擇賽格類型「根控制器」。這就是它,使用我的答案中提供的代碼,你應該很好(Y) – Albara

+0

嘗試刪除'.navigationController'? – Albara

0

您需要在UINavigationController中嵌入您的RelaxInKZViewController才能使用pushsegue。從頂部的菜單中選擇RelaxInKZViewController->Editor->Embed In->Navigation Controller。我認爲這會解決你的問題。

+0

錯誤仍然存​​在:(http://s18.postimg.org/eo85ky76h/2013_11_25_14_34_32.png - 它現在是我的故事板 –

+0

嘗試清理項目並運行再次也重置模擬器設置 – suhit

+0

沒有什麼變化 –