2015-01-02 3 views
1

В моем основном представлении у меня есть 4 статических строки таблицы. 2 из этих рядов развернутся в подробный вид в основном представлении, а второй 2 заменит содержимое подробного представления. Я контролировать то, что происходит с помощью метода didSelectRowAtIndexPath() путем вызова функции в зависимости от обстоятельств showViewController() и showDetailViewController():UISplitViewController сбой при использовании showDetailViewController

- (void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    if (indexPath.row == 0) { 
     Master2TVC *m2tvc = [self.storyboard instantiateViewControllerWithIdentifier:@"master-2"]; 
     [self showViewController:m2tvc sender:self]; 
    } else if (indexPath.row == 1) { 
     Master3TVC *m3tvc = [self.storyboard instantiateViewControllerWithIdentifier:@"master-3"]; 
     [self showViewController:m3tvc sender:self]; 
    } else if (indexPath.row == 2) { 
     Detail2VC *d2vc = [self.storyboard instantiateViewControllerWithIdentifier:@"detail-2"]; 
     [self showDetailViewController:d2vc sender:self]; 
    } else if (indexPath.row == 3) { 
     Detail3VC *d3vc = [self.storyboard instantiateViewControllerWithIdentifier:@"detail-3"]; 
     [self showDetailViewController:d3vc sender:self]; 
    } 
} 

Шаблон для шаблона Master-Detail создает ссылку из главного зрения на детальном:

self.detailViewController = (DetailViewController *)[[self.splitViewController.viewControllers lastObject] topViewController]; 

Если я правильно понимаю, эта ссылка существует, так что главная сторона может отправлять сообщения на сторону детали. В моем случае класс моего подробного представления изменится (Detail3VC, Detail2VC и т. Д.), Поэтому я решил удалить эту строку и сделать обмен сообщениями по-другому; однако теперь, когда я загружаю любой из своих новых подробных представлений и изменяю вращение iPad, приложение иногда вылетает с ошибкой EXC_BAD_ACCESS.

Из того, что я понимаю, EXC_BAD_ACCESS обычно означает, что вокруг где-то находится объект, который не должен быть. Я не смог найти что-либо в документации Apple, которая говорит о необходимости изменить что-либо еще при использовании вызова showDetailViewController(). Фактически, я думал, что причина использования showDetailViewController() заключается в том, что splitViewController управляет всеми деталями, и вам не нужно в своих классах.

У пользователя есть какие-то ошибки?

ответ

2

Я подтвердил сбой, с которым вы столкнулись. Это всегда, а не иногда, происходит при изменении поворота iPad.
В любом случае, нам кажется, что нам необходимо реализовать -targetDisplayModeForActionInSplitViewController: из UISplitViewControllerDelegate и вернуть любое значение, кроме UISplitViewControllerDisplayModeAutomatic.

+1

Таким образом, чтобы избавиться от сбоев, но теперь, когда я меняю ориентацию на портрет, у моего детального представления нет маленького шеврона для получения главного обзора. –

+0

У меня есть следующий вопрос, который, возможно, вы также можете ответить. Я смог успешно получить все, чтобы работать с помощью segues вместо функций showDetailViewController() и showViewController(). Являются ли оба подхода действительными с более поздним, только что являющимся новой техникой? –

+1

вам нужно будет добавить barButtonItem самостоятельно, например 'self.navigationItem.leftBarButtonItem = self.splitViewController.displayModeButtonItem;' при использовании 'showDetailViewController'. – bluedome

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