未调用协议方法。我正在使用pop over controller。我得到一个nil委托和时间表视图控制器中的方法没有被调用。我哪里错了。我是这个协议的新手。下面是我的代码..我只发布主代码删除所有其他无用的代码...我只想从TimeTable视图控制器导航到根视图控制器从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
答案 0 :(得分:1)
我认为当您分配viewDidLoad
时,问题可能出在self.delegate=testTimeTableViewController;
方法,因为testTimeTableViewController
从未初始化。
由于您在创建视图控制器时分配了委托,因此不应再次分配它。
此外,您不能retain
代表,而是使用weak
引用。