2014-09-05 2 views
1

Невозможно вызвать метод протокола. Я использую pop over controller. я получаю делегата nil, а метод в контроллере просмотра таблицы времени не вызывается. Где я иду не так. Я новичок в этом протоколе. ниже мой код .. я только отправил только основной код извлекая весь остальной бесполезный код ... я просто хочу, чтобы перейти от просмотра TimeTable контроллера Root вида контроллера при выборе кнопки из PopOverView контроллеране удается перейти к контроллеру корневого представления

TimetableView Controller.h 


#import <UIKit/UIKit.h> 
#import "NotesandReminders.h" 
#import "AppDelegate.h" 
#import "PopOverViewController.h" 

@class PopOverViewController; 

@interface TimeTableViewController : UIViewController <UICollectionViewDataSource, UICollectionViewDelegate,TestProtocol> 


@property(nonatomic,strong)PopOverViewController *testViewController; 






Timetable view controller.m 


@interface TimeTableViewController() 
@end 

@implementation TimeTableViewController 



@synthesize testViewController; 

- (void)viewDidLoad 
{ 
    self.testViewController=[[PopOverViewController alloc]init]; 

    testViewController.delegate=self; 
} 

-(void)LogOut 
{ 

[self.navigationController popToRootViewControllerAnimated:NO]; 
} 




POPOVER VIEW CONTROLLER.H 

@protocol TestProtocol <NSObject> 

@required 
-(void)LogOut; 

@end 


POP OVER VIEW CONTROLLER.H 
#import <UIKit/UIKit.h> 
#import "TimeTableViewController.h" 


@class TimeTableViewController; 
@interface PopOverViewController : UIViewController <UIPopoverControllerDelegate> 
{ 
    id<TestProtocol>delegate; 
} 

- (IBAction)out:(id)sender; 


@property(nonatomic,strong)TimeTableViewController *testTimeTableViewController; 

@property(nonatomic,strong)UIPopoverController *popoverController; 
@property(retain) id<TestProtocol>delegate; 


@end 




POP OVER VIEW CONTROLLER.M 

#import "PopOverViewController.h" 

@interface PopOverViewController() 

@end 

@implementation PopOverViewController 

@synthesize delegate; 
@synthesize popoverController,testTimeTableViewController; 

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 
{ 
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 
    if (self) { 

    } 
    return self; 
} 

- (void)viewDidLoad 
{ 



    self.delegate=testTimeTableViewController; 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view. 
} 



- (IBAction)out:(id)sender { 
    self.TimeObj=[[TimeTableViewController alloc]init]; 
[self.TimeObj Signout]; 

} 
@end 

ответ

1

I подумайте, что проблема может быть связана с методом viewDidLoad, когда вы назначаете self.delegate=testTimeTableViewController;, потому что testTimeTableViewController никогда не инициализировался.

Поскольку вы назначаете делегата при создании контроллера вида, его не следует назначать повторно.

Кроме того, вы не должны делегировать делегата retain, используйте вместо этого ссылку weak.

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

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