无法导航到根视图控制器

时间:2014-09-05 13:26:07

标签: ios objective-c

未调用协议方法。我正在使用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

1 个答案:

答案 0 :(得分:1)

我认为当您分配viewDidLoad时,问题可能出在self.delegate=testTimeTableViewController;方法,因为testTimeTableViewController从未初始化。

由于您在创建视图控制器时分配了委托,因此不应再次分配它。

此外,您不能retain代表,而是使用weak引用。