iOS-UISplitViewController z storyboard-wiele głównych widoków i wiele widoków szczegółów

Próbuję złożyć aplikację na iPada za pomocą UISplitViewController i storyboardów. Widok główny zaczyna się od kontrolera nawigacyjnego połączonego z widokiem tabeli z 6 opcjami menu. Każda komórka w tabeli popycha inny kontroler widoku tabeli do stosu nawigacyjnego. To działa dobrze dla widoku głównego. Każdy widok główny ma listę tabeli, która po kliknięciu musi wyświetlić inny kontroler widoku w okienku szczegółów. Obecnie zrobiłem to z zestawem segue 'a do 'Replace' i "podział szczegółów", który działa przy pierwszym kliknięciu wiersza, ale jak tylko klikniesz inny wiersz w widoku głównym lub obrócisz urządzenie, aplikacja zawiesza się z EXC_BAD_ACCESS.

Jestem całkiem pewien, że moje problemy mają związek z tym, jak delegat jest ustawiony dla UISplitViewController. Jestem zdezorientowany, jak to powinno być używane, gdy mam wiele master VC i wiele szczegółów VC. Gdzie należy umieścić kod delegata-master czy detail? Czy muszę wdrożyć Uisplitviewcontrollerdelegować zdarzenia Protokołu w każdym kontrolerze widoku?

Każda pomoc mile widziana.

Author: Jonathan Wareham, 2012-05-10

1 answers

Jeśli delegat kontrolera widoku podzielonego był kontrolerem widoku szczegółowego, który został zastąpiony, jest to przyczyna awarii. Zastąpiony kontroler widoku szczegółowego jest usuwany, więc delegat kontrolera widoku podzielonego nie jest już odniesieniem do poprawnego obiektu.

Możesz zaktualizować delegata w preparedforsegue: sender:. Na przykład:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([[segue identifier] isEqualToString:@"MySegue"]) {
        UIViewController *destinationViewController = [segue destinationViewController];
        if ([destinationViewController conformsToProtocol:@protocol(UISplitViewControllerDelegate)]) {
            self.splitViewController.delegate = destinationViewController;
        }
        else {
            self.splitViewController.delegate = nil;
        }
    }
}

To, którego kontrolera widoku używasz dla delegatów, zależy od hierarchii kontrolera widoku. W najprostszym przypadku każdy widok Kontrolery przypisane do splitvc detail będą prawdopodobnie musiały być delegatami. Możesz oprzeć je wszystkie na wspólnej super klasie, która obsługuje współdzieloną logikę delegowania kontrolera widoku dzielonego.

 16
Author: Chris Miles,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-05-14 04:10:19