2013-09-27 25 views
10

Tôi gặp khó khăn khi thực hiệnSegueWithIdentifier để hoạt động. tôi tiếp tục nhận đượcperformSegueWithIdentifier không tạo ra sự phân biệt nào với lỗi định danh

"Receiver (<UINavigationController: 0x1e59a9d0>) has no segue with 
identifier 'identA'" 

Những gì tôi đã làm là:

  1. Bước: tạo ra một ứng dụng xem đơn và thêm một nhãn - "Xem bộ điều khiển A" với bộ điều khiển xem.
  2. Bước: Kéo và thả Trình điều khiển chế độ xem khác và thêm nhãn - "Xem bộ điều khiển B" vào trình điều khiển chế độ xem mới.
  3. Bước: Chọn view controller A và thực hiện tổng biên tập> nhúng trong-> điều khiển chuyển hướng
  4. Bước: có dây Xem điều khiển từ A đến B với bộ điều khiển Xem push segue với Identifier "identA" Như thế này: wiring the seque

  5. Bước: thêm một cuộc gọi để thực hiệnSegueWithIdentifier onView controller Một ViewDidLoad của A. Như thế này:


- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    [self.navigationController performSegueWithIdentifier:@"identA" sender:self]; 
    // Do any additional setup after loading the view, typically from a nib. 
} 

đã tôi làm gì sai ???

+3

Không nhìn vào bất cứ thứ gì cần kiểm tra, tôi tin rằng bạn phải gọi '[self performSegue ...]' thay vì '[self.navigationController perfo ...] ' – erdekhayser

+0

Yep U right .... – Yony

+0

Đôi khi nó là những điều đơn giản, chúng tôi không nghĩ về – erdekhayser

Trả lời

26

Bạn đang kêu gọi performSegueWithIdentifier:sender: trên self.navigationController nhưng bạn thiết lập các segue trên View controller A:

dây Xem controller A đến Xem điều khiển B với push segue với Identifier "identA"

Hãy thử thay thế:

[self.navigationController performSegueWithIdentifier:@"identA" sender:self]; 

với

[self performSegueWithIdentifier:@"identA" sender:self]; 
+1

Nhưng làm thế nào để bạn popViewController khi bạn làm điều này? – hitme

+0

@stefanB, tương đương 2.0 nhanh là gì? này: self.performSegueWithIdentifier ("loginView", người gửi: self); – alex

4

Chỉ cần một gợi ý (mà đã cứu tôi ngày nay) ...

Tôi đã viết nhiều iPad & iPhone apps trước đó, sử dụng các trang Master-Detail, Navigation kiểm soát, vv, nhưng hôm nay, tôi đã bối rối , như ứng dụng iPhone hai màn hình đơn giản của tôi trong XCode 5.1 từ chối cho phép tôi phân biệt từ màn hình này sang màn hình khác, trong UINavigationController.

Đó là một trong những lỗi XCode điên rồ khác không có ý nghĩa gì. Tôi thậm chí có thể tạo ra một dự án mới mới XCode, và ở đó, cùng một segue sẽ hoạt động hoàn hảo.

[self performSegueWithIdentifier:@"segueTest" sender:nil]; 

Cuối cùng, tôi đã tìm ra nguyên nhân.

Tôi đã tạo một dự án trống trong XCode, thêm Bảng phân cảnh vào dự án của tôi theo cách thủ công, nhưng, tôi đã bỏ lỡ một bước.

Khi bạn thêm Bảng phân cảnh, bạn cũng cần truy cập tệp .plist của mình và thêm dòng một cách thủ công cho ứng dụng của bạn biết tên bảng phân cảnh chính của bạn.

enter image description here

Nếu bạn không làm điều này, kỳ lạ, ứng dụng của bạn sẽ xây dựng thành công, nó sẽ chạy, bạn có thể sẽ nhận được màn hình đầu tiên của bạn sẽ được hiển thị thành công ... nhưng sau đó những thứ (như tìm tên segue) sẽ bắt đầu đi sai.

(Sigh.)

Tôi hy vọng điều này sẽ giúp các nạn nhân XCode khác.

Tôi cần một ly bia ...

0

Ok. Bit của một tình huống cụ thể ở đây, nhưng trong tình huống của tôi, tôi đã thiết lập một UISplitViewController trong một dự án mới. Tôi muốn thực hiện một phân đoạn trong bộ điều khiển xem chi tiết sau khi nhấn một ô trong chế độ xem bảng chính. Vì vậy, trong didSelectRowAtIndexPath: của bảng tổng Tôi thực hiện

[[NSNotificationCenter defaultCenter]postNotificationName:@"userDetails" 
                  object:nil]; 

và trong giao diện chi tiết trong viewDidLoad: tôi thêm người quan sát và phương pháp dụ

[[NSNotificationCenter defaultCenter]addObserver:self 
             selector:@selector(userDetailsShow) 
              name:@"userDetails" 
              object:nil]; 
-(void)userDetailsShow{ 
    [self performSegueWithIdentifier:@"userDetails" sender:nil]; 
} 

Khi nhấn các tế bào trong giao diện tổng thể nó sẽ bắn nhưng không làm gì cả. Hóa ra vấn đề là: enter image description here

Tôi đã để nguyên khoảng cách mặc định giữa ô xem bảng chính và bộ điều khiển điều hướng chi tiết đang hoạt động. Trong trường hợp này tôi không cần nó, vì vậy đã có thể xóa nó. Sau khi xóa nó nó làm việc hoàn hảo, như nó phải.
Hy vọng rằng bây giờ tôi có thể đặt mái tóc này trở lại ...

Các vấn đề liên quan