2012-01-19 17 views
16

Tôi dường như không nhận được SIGABRT này mà tôi tiếp tục nhận được. Tôi có ứng dụng bảng phân cảnh iOS này và trong bảng phân cảnh tôi có UITableViewController. Bây giờ, tôi có thể lấy một tế bào của TVC và làm cho nó đẩy bộ điều khiển xem "segue", nhưng nếu tôi cần phải ngừng hành động "segue" trên một số điều kiện nhất định? Rõ ràng là bạn không thể, vì phương thức preparForSegue: sender: không cho phép nó, và nó có vẻ là callback duy nhất được gọi khi một quá trình chuyển đổi sắp được thực hiện.performSegueWithIdentifier vs instantiateViewControllerWithIdentifier

Vì vậy, tôi đoán tôi có thể đi vào bảngView: didSelectRowAtIndexPath: và thực hiện segue theo chương trình. Tối ưu, nhưng vẫn…

Vâng, hóa ra tôi đã đoán sai. Hoặc ít nhất, tôi đang làm điều gì sai. Cách rõ ràng nhất để làm điều đó sẽ là

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    [self performSegueWithIdentifier:@"TheOtherIdentifier" sender:self]; 
} 

nhưng tai nạn toàn bộ ứng dụng với một SIGABRT, mà không đưa ra bất cứ thông tin hữu ích (và vâng, tôi chắc chắn rằng nó là dòng mà làm cho sự sụp đổ của ứng dụng, tôi kiểm tra với trình gỡ lỗi :) Hơn nữa, VC tôi đang cố gắng tải có số nhận dạng được đặt chính xác, vì mã sau đây

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    UIViewController *vc = [self.storyboard instantiateViewControllerWithIdentifier:@"TheOtherIdentifier"]; 
    [self.navigationController pushViewController:vc animated:YES]; 
} 

"works". Dấu ngoặc kép chỉ ra rằng đây rõ ràng không phải là cách chuyển đổi như vậy nên được thực hiện.

Bây giờ: ý tưởng?

+0

Chỉ cần rõ ràng, bạn đã nói bạn đã đặt số nhận dạng này cho bộ điều khiển chế độ xem đích. Nhưng bạn đã thiết lập một định danh cho chính segue? Đó là số nhận dạng bạn cần sử dụng trong trường hợp đầu tiên. –

+0

Ok, tôi đã bỏ lỡ điều đó. Tham khảo câu trả lời của T.J. để có thêm ý kiến. – Morpheu5

Trả lời

8

Hãy thử điều này:

  1. Sử dụng khối mã đầu tiên và không phải là thứ hai.
  2. Trong kéo điều khiển cốt truyện từ ô này sang bộ điều khiển chế độ xem khác. Lưu ý rằng một segue được tạo ra.
  3. Nhấp vào segue. Sử dụng các thanh tra thuộc tính để cung cấp cho các segue và định danh "theOtherIdentifier" (thấp hơn trường hợp "t" khuyến khích). Cũng chọn một phong cách segue của "đẩy" giả sử bạn đang sử dụng một bộ điều khiển chuyển hướng.
  4. Bảng phân cảnh sẽ khởi tạo trình điều khiển chế độ xem khác. Hãy chắc chắn rằng bạn không làm điều này trong mã của bạn.
+0

Cảm ơn, làm rõ vấn đề, ngoại trừ nếu tôi đặt segue qua IB, nó được thực hiện không có vấn đề gì. Tôi cần phải bao gồm một điều kiện, ví dụ tôi cần kiểm tra danh tính của người dùng dựa trên các giá trị được nhập trong các ô khác. – Morpheu5

+0

Ok, xin lỗi, tôi đã bỏ lỡ phần điều khiển cốt truyện :) EDIT: Woops. Xin lỗi lần nữa. Tôi thu nhỏ để tạo ra khoảng cách từ VC này sang VC khác, nhưng tôi mới nhận ra rằng tôi có thể làm nó kéo thanh hệ thống trên cùng. Đừng lo, dù sao đi nữa: Tôi đã thành công :) – Morpheu5

+0

Tuyệt. Tôi vui vì tất cả đã làm việc. Tạo một khoảng cách từ bằng cách chọn trong bộ điều khiển xem từ trong thanh hệ thống là mới đối với tôi. Tôi đã từng tạo các nút ẩn cho phân đoạn có điều kiện. –

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