2012-02-24 6 views
5

Moja aplikacja wykorzystuje dane o lokalizacjach i prezentuje je zarówno jako tabelę, jak i mapę.Jak udostępnić obiekt UIManagedDocument za pomocą scenorysów z kontrolerem Tab Bar jako kontrolerem początkowym?

Zaczyna się od kontrolera paska kart, każdy z jego widoków to kontroler nawigacyjny (jeden do widoku tabeli, jeden do mapy itp.).

Chcę dzielić UIManagedObject w celu wykorzystania tego samego Zarządzane Context Object więc jeśli aktualizacje użytkownika w widoku tabeli, dane również aktualizowany na mapie, więc nie ma potrzeby, aby zaktualizować dwa razy.

Pierwotnie myślałem o podklasowaniu kontrolera paska kart i dodaniu obiektu UIManagedDocument jako właściwości i przekazywaniu go do każdego kontrolera w ramach metody przygotowania do przejścia. Ale czytałem, że UITabBarController nie ma być podklasy.

Innym rozwiązaniem może być utworzenie kontrolera widoku, dodanie zarządzanego dokumentu jako właściwości i paska kart do niego. Ale myślę, że mój scenariusz byłby niejasny lub niespójny, pokazując niektóre relacje graficznie, a inne po prostu w kodzie.

Który z nich jest odpowiedni? Czy istnieje lepszy sposób na zrobienie tego?

Z góry dziękuję i pozdrawiam.

Odpowiedz

3
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
if ([[segue identifier] isEqualToString:@"showGuide"]) 
    { 
     UITabBarController *tabBarController = (UITabBarController *)[segue destinationViewController]; 
     for (id vc in tabBarController.viewControllers) {  
      [vc setValue:_document forKey:@"document"];    
    } 
} 
+0

powinienem zrobić w App Delegata? – Armando

+0

Nie, należy to zapisać w ViewController, który stoi przed TabBarController. To, co tutaj wykorzystałem, nazywa się wzorcem projektowym Key Value Coding. Używając go, przypisałem właściwość "document" każdego kontrolera TabBarController do self.document. – Shmidt

+0

Dobry samouczek do używania UIManagedDocument: http://www.informit.com/articles/article.aspx?p=1842295&seqNum=10 – Shmidt

2

Wpadłem również na ten problem i zdecydowałem się na oddzielną klasę obsługi dokumentów, która zapewnia dostęp do załadowanego dokumentu przez blok.

[[MYDocumentHandler sharedDocumentHandler] performWithDocument:^(UIManagedDocument *document) { 
    // Do stuff with the document, set up a fetched results controller, whatever. 
}]; 

pisałem moje rozwiązanie i pisał kod tutaj: Core Data with a Single Shared UIManagedDocument

Powiązane problemy