2015-08-18 2 views
0

У меня возникли проблемы с выяснением причин, почему я получаю нулевого делегата для этого звонка. Похоже, я отлично настраиваю делегата.Делегат не установлен (правильно установлен)

LogoutViewController.h

@protocol SomeNewDelegate <NSObject> 

@required 
- (void)someMethod; 
@end 

@interface LogoutViewController : UIViewController 

@property (nonatomic, weak) id<SomeNewDelegate> delegate; 

LogoutViewController.m

- (IBAction)logoutButtonTapped:(id)sender { 
    NSLog(@"logout tapped"); 
    [self.delegate someMethod]; 
    [self dismissViewControllerAnimated:YES completion:nil]; 
} 

MainViewController.m

@interface MainViewController() <UIScrollViewDelegate, SomeNewDelegate> 

@property (nonatomic, strong) LogoutViewController *logoutVC; 

@end 

@implementation MainViewController 
- (void)viewDidLoad { 
    [super viewDidLoad]; 
    self.logoutVC.delegate = self; 
} 

- (void)someMethod { 
    NSLog(@"someMethod"); 
} 

SomeMethod никогда не вызывается, и я не понимаю, почему делегат равна нулю. Любая помощь?

+1

Вы не создали экземпляр объекта LogoutViewController –

+0

, который вы только что объявили и использовали этот «logoutVC». , вам также необходимо создать экземпляр этого объекта. –

ответ

0

Использование ниже кода в viewDidload

LogoutViewController *logoutVC = [[LogoutViewController alloc]init]; 
logoutVC.delegate = self; 

Удалить LogoutViewController от объекта. Я использовал это и его работу отлично.

Надеюсь, что это сработает для вас.

Отредактированный код в файле .h

@protocol syncDataDelegate <NSObject> 
@required 
- (void) offlineSyncProcess; 
@end 

@interface LoginViewController : UIViewController 
{ 
    id <syncDataDelegate> syncDelegate; 
} 
@property (retain) id syncDelegate; 

в .m файл

@implementation LoginViewController 
{ 
    // your code 
} 
@synthesize syncDelegate; 

- (IBAction)logoutButtonTapped:(id)sender { 
    NSLog(@"logout tapped"); 
    [syncDelegate offlineSyncProcess]; 
} 

Вы можете вызвать метод делегата здесь в LoginViewController.m файл из любого метода.

в моей реализации делегата в .m файл

@interface MainViewController()<syncDataDelegate> 

@end 
@implementation MainViewController 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    LoginViewController *LVC = [[LoginViewController alloc]init]; 
    LVC.syncDelegate = self; 
} 

теперь использовать делегат METHODE здесь

- (void) offlineSyncProcess 
{ 
    // your code here 
} 

этот код работает в моем проекте, проверить это в вашем проекте.

+0

Все еще не работает. Это связано с тем, что LogoutViewController является модальным? – Christian

+0

Удалить эту строку [self rejectViewControllerAnimated: YES complete: nil]; и еще раз проверьте, вызван ли ваш метод или нет? – BKjadav

+0

проверить отредактированный код – BKjadav

0

Убедитесь, что ваш logoutVC не ноль, когда вы пытаетесь установить для него свойство delegate.

Вы можете реализовать метод setDelegate в своем LogoutViewController.m. Затем используйте точку останова, чтобы убедиться, что она вызывается.

-1

Делегат равен нулю, поскольку ваш logoutVC равен нулю, вы не выделили память для свойства logoutvc.

Непосредственно перед self.logoutVC.delegate = самостоятельно Добавить следующий код

self.logoutVC = [[LogoutViewController Alloc] инициализации];

Все начнет работать автоматически.

+0

Не могли бы вы добавить комментарий, что не так с этим решением, почему он был проголосован. –

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