Делегат iOS не работает с executeSegueWithIdentifier? - PullRequest
3 голосов
/ 13 декабря 2011

У меня есть два контроллера (первый, второй) в раскадровке, xcode 4.2.

Первый контроллер имеет табличное представление и встроен в навигационный контроллер. Второй контроллер также имеет вид таблицы и встроен в контроллер навигации (не такой, как первый)

В первом. Ч .:

#import "second.h"
...
@interface first : UIViewController <secondDelegate, UITableViewDelegate, UITableViewDataSource>
...

В первом.м .:

- (IBAction)add:(id)sender // action when tapped a button on topbar
{
    [self performSegueWithIdentifier:@"addSegue" sender:sender];
}

....

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if([[segue identifier] isEqualToString:@"addSegue"])
    {
        NSLog(@"delegated");
        second *controller=[segue destinationViewController];
        controller.delegate=self;
    }
}

- (void)callback
{
     NSLog(@"Callback here");
}

Segue - модальный переход с переходом по умолчанию.

second.h:

@protocol secondDelegate
   -(void)callback;
@end

....

id <secondDelegate> delegate;
@property (nonatomic,assign) id <secondDelegate> delegate;

second.m:

... (button of topbar tapped action) ...
[self dismissModalViewControllerAnimated:YES];
NSLog(@"class: %@",[self delegate]);
[[self delegate]entryGroupDoneButtonTapped];

Резюме:

Я не вижу сообщения "обратный вызов здесь", но у меня есть "делегированное" сообщение. Отладочная строка "class:" печатает "null".

Почему?

(при этом я могу отправлять любые данные с первого по второй, только обратный вызов делегата не работает)

1 Ответ

5 голосов
/ 06 июня 2012

Я нашел решение: destinationViewController возвращает UInavigationController, поэтому мы можем использовать: AddDrinkViewController *controller=[[[segue destinationViewController]viewControllers]objectAtIndex:0];

...