2011-12-23 1 views
6

У меня есть два TableViewControllers с промежуточным промежуточным. Когда пользователь нажимает на ячейку в первом ТВЦ, они получают второй TVC. Segue является модальным, имеет идентификатор под названием «segueToLocationDetails» и передает вместе с ним объект. Вы можете думать о втором ТВК как о «детали» более или менее.performSegueWithIdentifier от TableViewController до второго TVC, встроенного в NavController, не работает

Мой код отлично работает в сценарии, описанном выше. Однако это ломается, как только я вставляю второй TVC в контроллер навигации.

Пример. Я работаю отлично. Затем я выделил второй TVC в IB, перейдя к Product | Вставить в | Контроллер навигации. Теперь второй TVC находится в контроллере Nav. Однако segue все же указывает на второй TVC. Я удаляю segue и снова подключаю его из первой ячейки TVC к контроллеру навигации, и обязательно дайте segue идентификатор. Беги снова, и он ломается! Ошибка ниже ...

2011-12-23 15: 30: 45,469 Project12 [5219: 11603] - [UINavigationController setDetailsObject]: непризнанные селектор направлен например 0x7b92ce0 2011-12-23 15 : 30: 45,471 Project12 [5219: 11603] * Нагрузочный приложение из-за для неперехваченного исключения 'NSInvalidArgumentException', причина: '- [UINavigationController setDetailsObject]: непризнанные селектор отправлен экземпляр 0x7b92ce0' * Первый бросок стека вызовов: (0x16ea052 0x150ad0a 0x16ebced 0x1650f00 0x1650ce2 0x3933 0x703e1e 0x36f6d9 0x36f952 0xbf786d 0x16be966 0x16be407 0x16217c0 0 x1620db4 0x1620ccb 0x14ec879 0x14ec93e 0x2dfa9b 0x2a98 0x29f5 0x1) завершение вызова throwing exceptionCurrent язык: авто; В настоящее время цель-с

Некоторые коды ниже, чтобы помочь объяснить:

AllLocations.h & AllLocations.m (это главная таблица)

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 (это подробный вид на таблицу)

DetailsTVC.h 

@interface DetailsTVC : UITableViewController 

@property (nonatomic, strong) SQLiteDB *detailsObject; 


DetailsTVC.m 

@implementation SpotDetailsTVC 

@synthesize spotDetailsObject; 

Примечание: я оставил все код, который не был действительно важен или имел отношение к вопросу.

Снова: Это работает отлично, если segue переходит из исходного TableVeiwController в другой TableViewController. Он ломается, когда я вставляю второй TVC в контроллер Nav. Мне нужно знать, как это сделать с Nav Controller на картинке. Заранее спасибо!

ответ

11

DetailsTVC *detailsTVC = [segue destinationViewController];

Эта строка неверна. Поскольку ваш второй TVC теперь встроен в контроллер навигации, [segue destinationViewController] теперь является UINavigationController. Это должно работать:

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

+1

Хорошо, спасибо, но я получаю это предупреждение в настоящее время: файл: // Localhost/Users/Me/Desktop/Project13/AllLocations.m: warning: Semantic Issue: Несовместимые типы указателей, инициализирующие 'locationDetailsTVC * __ strong' с выражением типа 'UIViewController *' – ElasticThoughts

+0

Попробуйте это в 'prepareForSegue: sender:', чтобы узнать, что такое destionationController: 'NSLog (@"% @ " , NSStringFromClass ([[segue destinationViewController] class])) ' –

+0

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

Смежные вопросы