2012-10-26 19 views
5

Oto mój projekt aplikacji. Mam mainController, który prezentuje secondViewController. Teraz chcę odwołać secondViewController a następnie wywołać metodę aMethod na mainController tak:dismissViewControllerAnimowana metoda zakończenia nie działa

[self dismissViewControllerAnimated:YES completion:aMethod]; 

Ale to daje mi błąd use of undeclared identifier 'aMethod'

Oczywiście nie jestem poprawnie używając obsługi zakończenia, ale nie mogę zrozumieć w prawidłowy sposób.

Odpowiedz

12

myślę, że to, czego szukasz,

[self dismissViewControllerAnimated:YES completion:^{ 
      [self.mainController aMethod]; 
     }]; 

W powyższym kodzie trzeba zadeklarować self zewnątrz bloku i używać go jak

__block SecondViewController *object = self; 

[self dismissViewControllerAnimated:YES completion:^{ 
       [object.mainController aMethod]; 
      }]; 

Po prostu, aby uniknąć zatrzymania self w bloku.

Aktualizacja:

Mam teraz problem. Musisz zadeklarować mainController jako właściwość w pliku .h pod numerem secondViewController. Po tym, gdy prezentujemy secondViewController z maincontroller, trzeba ustawić go jak

secondViewController.maincontroller = self; 
[self presentViewController:secondViewController animated:YES completion:Nil]; 

w pliku SecondViewController.h,

@property(nonatomic, assign) MainController *mainController; 

w pliku SecondViewController.m,

@synthesis mainController; 

Aktualizacja 2:

Jeśli nie chcesz zadeklarować maincontroller jako właściwości, spróbuj tego. Nie jestem pewien, czy to jest właściwa droga. Ale wygląda na to, że kiedyś działało.

MainController *mainController = (MainController *)[self.view.superview nextResponder]; 

    [self dismissViewControllerAnimated:YES completion:^{ 
        [mainController aMethod]; 
       }]; 

Update 3 (sugerowane):

ten powinien pracować dla Ciebie. Sprawdź to.

MainController *mainController = (MainController *)self.parentViewController; 

    [self dismissViewControllerAnimated:YES completion:^{ 
        [mainController aMethod]; 
       }]; 
+0

Cóż ig im robi '__block YouViewController * object = self' nie byłby ustawienie obiektu, który będzie viewController, który jest odwołany? Nie ten prezentowany? –

+0

Dobrze, widziałem twoją aktualizację. obiekt nie ma mainController, nie wie, co to jest .. –

+0

Czy możesz sprawdzić teraz i daj mi znać, czy to zadziałało? – iDev

-3

Declare to: dismissViewControllerAnimated:YES completion:Nil

Mam nadzieję, że to pomaga.

+0

Nie, to nie pomoże. Próbuję wywołać metodę na viewController, który będzie wyświetlany, gdy bieżący jest odwołany ... stąd moje użycie zakończenia –

1

Chcesz coś takiego:

[self dismissViewControllerAnimated:YES completion:^{ 
      ... 
      <do something on completion here> 
      ... 
     }]; 
+0

samego błędu ... który kontroler otrzymuje metodę w zakończeniu? –

+0

Co to jest metoda? – EarlyRiser

+0

jest to metoda zadeklarowana w "mainController", która jest kontrolerem wyświetlanym podczas wywoływania dismissviewcontrolleranimated –

Powiązane problemy