2017-02-16 104 views
1

我已經在視圖控制器中編寫了協議,並在AppDelegate中實現它,並且當我從視圖控制器調用委託函數時,不調用委託函數。下面是我的代碼 -在AppDelegate中未調用委託函數

在課堂AuthenticationViewController -

@class AuthenticationViewController; 
@protocol ApplicationTiomeoutDelegate <NSObject> 

-(void) addObserverForTimeout; 

@end 

而且使用委託調用這個函數 -

[self.appTimeoutDelegate addObserverForApplicationTimeout]; 

而在AppDelegate中,我已經實現了這個協議是這樣 -

@interface AppDelegate() <ApplicationTiomeoutDelegate> 
@end 

然後設置代表自我 -

AuthenticationViewController *timeoutDelegate = [[AuthenticationViewController alloc] init]; 
[timeoutDelegate setAppTimeoutDelegate:self]; 

並實現了委託功能,以及在AppDelegate中,這是從來沒有以某種方式被稱爲 -

-(void) addObserverForApplicationTimeout{ 
// this function is never called 
} 

我不知道什麼是不正確的位置。

+0

你有沒有加載的'timeoutDelegate'控制器在你的應用程序? –

+0

我沒有得到你在問什麼? timeoutDelegate是一個實例,用於爲appTimeoutDelegate設置self,並在didFinishLaunchingWithOptions本身中調用它。 –

+0

@Richa Srivastava:第一件事是第一件事。如果你真的想在應用程序委託中調用一個方法,爲什麼你甚至需要一個協議?應用程序委託是整個應用程序生命週期中所有VC都可用的單例實例。 2.分配後啓動VC你在做什麼?它如何被加載是你的根VC?我猜你可能會啓動一個不同的實例加載一個不同的實例。最後提供更多的代碼,以獲得準確的答案:) –

回答

0

AppDelegate是一個單身人士不需要ApplicationTiomeoutDelegate協議調用。您可以直接調用addObserverForTimeout

0

你創建你的的appdelegate方法,你可以直接調用它,無論你想與的appdelegate的實例。

對於你的問題,請參考下面

哪裏是爲您的委派創建實例,並在那裏被調用您的代理形成的視圖 - 控制,它使用了兩個類之間進行通信,它應該有協議的參考。

試試這個

viewcontroller.h

@protocol customDelegate; 
#import <UIKit/UIKit.h> 
#import "CustomTableViewCell.h" 

@interface ViewController : UIViewController<UITableViewDelegate> 
{ 

    IBOutlet UITableView *mainTableView; 
} 
@property (nonatomic,strong) id <customDelegate> delegate; 
@end 

@protocol customDelegate <NSObject> 

-(void)method; 

@end 

ViewController.m

- (void)viewDidLoad { 
    [self.delegate method]; 
} 

您的應用程序委託

@interface AppDelegate() <customDelegate> 
@end 

didfinishlaunghing

viewController = [[ViewController alloc]initWithNibName:@"ViewController" bundle:nil]; 
    viewController.delegate = self; 

和實現方法:

-(void)method{ 
    NSLog(@"calling"); 
}