2011-12-23 21 views
6

Tôi có hai TableViewControllers với một segue ở giữa. Khi người dùng nhấp vào một ô trong TVC đầu tiên, họ sẽ được giới thiệu với TVC thứ hai. Segue là phương thức, có một định danh được gọi là "segueToLocationDetails" và truyền một đối tượng cùng với nó. Bạn có thể nghĩ TVC thứ hai là trang "chi tiết" nhiều hơn hoặc ít hơn.performSegueWithIdentifier từ TableViewController sang TVC thứ hai được nhúng trong NavController không hoạt động

Mã của tôi hoạt động hoàn hảo trong kịch bản mà tôi đã mô tả ở trên. Nó phá vỡ tuy nhiên ngay sau khi tôi nhúng TVC thứ hai vào một bộ điều khiển chuyển hướng.

Ví dụ. Tôi có nó hoạt động hoàn hảo. Sau đó tôi nhấn mạnh TVC thứ hai trong IB, di chuột qua Sản phẩm | Nhúng vào | Bộ điều khiển điều hướng. Bây giờ TVC thứ hai là trong một điều khiển Nav. Tuy nhiên, segue vẫn chỉ vào TVC thứ hai. Tôi loại bỏ các segue và kết nối lại nó từ các tế bào đầu tiên của TVC để điều khiển chuyển hướng và chắc chắn cung cấp cho segue một định danh. Chạy một lần nữa, và nó phá vỡ! Lỗi này là dưới ...

2011-12-23 15: 30: 45,469 Project12 [5219: 11.603] - [UINavigationController setDetailsObject:]: chọn không được công nhận gửi đến dụ 0x7b92ce0 2011-12-23 15 : 30: 45,471 Project12 [5219: 11.603] * Chấm dứt ứng dụng do để ngoại lệ còn tự do 'NSInvalidArgumentException', lý do: '- [UINavigationController setDetailsObject:]: không được công nhận selector gửi đến dụ 0x7b92ce0' * ném Đầu tiên gọi stack: (0x16ea052 0x150ad0a 0x16ebced 0x1650f00 0x1650ce2 0x3933 0x703e1e 0x36f6d9 0x36f952 0xbf786d 0x16be966 0x16be407 0x16217c0 0 x1620db4 0x1620ccb 0x14ec879 0x14ec93e 0x2dfa9b 0x2a98 0x29f5 0x1) chấm dứt được gọi là ném ngoại lệCurrent language: auto; hiện mục tiêu-c

Một số code đang dưới đây để giúp giải thích:

AllLocations.h & AllLocations.m (đây là bảng tổng thể)

AllLocations.h 

@interface AllLocations : UITableViewController 
{ 
    SQLiteDB *mySQLiteDB; 
} 
@property (nonatomic, strong) NSMutableArray *locationsArray; 



AllLocations.m 

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

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    if ([[segue identifier] isEqualToString:@"segueToLocationDetails"]) 
    { 
     NSIndexPath *selectedIndexPath = [self.tableView indexPathForSelectedRow]; 
     NSInteger rowNumber = selectedIndexPath.row; 

     mySQLiteDB = (SQLiteDB *) [locationsArray objectAtIndex:rowNumber]; 

     DetailsTVC *detailsTVC = [segue destinationViewController]; 

     detailsTVC.detailsObject = mySQLiteDB;   
    } 
} 

DetailsTVC.h & DetailsTVC.m (đây là chế độ xem bảng chi tiết)

DetailsTVC.h 

@interface DetailsTVC : UITableViewController 

@property (nonatomic, strong) SQLiteDB *detailsObject; 


DetailsTVC.m 

@implementation SpotDetailsTVC 

@synthesize spotDetailsObject; 

Lưu ý: Tôi đã bỏ tất cả mã không thực sự quan trọng hoặc có liên quan đến câu hỏi.

Một lần nữa: Điều này làm việc hoàn hảo nếu segue đi từ Originating TableVeiwController đến TableViewController khác. Nó chỉ phá vỡ khi tôi nhúng TVC thứ hai trong một bộ điều khiển Nav. Tôi cần phải biết làm thế nào để có được điều này làm việc với bộ điều khiển Nav trong hình ảnh. Cảm ơn trước!

Trả lời

11

DetailsTVC *detailsTVC = [segue destinationViewController];

Dòng đó không đúng. Vì TVC thứ hai của bạn hiện được nhúng trong bộ điều khiển điều hướng, nên [segue destinationViewController] giờ đây là một UINavigationController. Điều này sẽ làm việc:

DetailsTVC *detailsTVC = [[segue destinationViewController] visibleViewController];

+1

Ok, cảm ơn bạn, tuy nhiên tôi nhận được cảnh báo này ngay bây giờ: file: // localhost/Users/me/Desktop/Project13/AllLocations.m: warning: Semantic Issue: Các kiểu con trỏ không tương thích khởi tạo 'locationDetailsTVC * __ strong' với biểu thức kiểu 'UIViewController *' – ElasticThoughts

+0

Hãy thử điều này trong 'preparForSegue: sender:' để tìm ra destionationController là gì: 'NSLog (@"% @ " , NSStringFromClass ([[segue destinationViewController] lớp])) ' –

+0

2011-12-23 16: 32: 20.741 Project13 [5452: 11603] UINavigationController – ElasticThoughts

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