self.revealViewController.panGestureRecognizer показывает null в iOS SWRevealViewController

Я не хочу использовать SWRevealViewController в своем приложении, поэтому я выполняю шаги по данной ссылке "https://www.youtube.com/watch?v=5SUV1YY2yxQ".

Но мое приложение разбивается на этой строке

[self.view addGestureRecognizer:self.revealViewController.panGestureRecognizer];

Complier показывает следующую ошибку

завершение приложения из-за необработанного исключения «NSInvalidArgumentException», причина: «*** -[__NSArrayM insertObject:atIndex:]: объект не может быть нулевым».

Пожалуйста, проверьте мой дизайн раскадровки

 прикреплен мой дизайн раскадровки --- здесь Reveal View Controller - это мое начальное представление из этого перехода соединения представления 1 для левого списка меню (простое табличное представление контроллера представления добавлено программно) 2 для подкласса контроллера навигации, а контроллер представления - это мой корень  Контроллер просмотра.. после отправки правильного приложения для учетных данных нажмите следующий вид, т.е. Контроллер представления с шестью вариантами панели инструментов (с синим фоном)

DashBoardSixOptionViewController

Ниже приведен мой код для синего фона, где я хочу открыть файл .h контроллера отображения.

#import <UIKit/UIKit.h>
 #import "SWRevealViewController.h"

@interface DashboardSixOptionViewController : UIViewController 
{

    SWRevealViewController *revealViewController;

}

@property (nonatomic,retain) SWRevealViewController *revealViewController;
@end

.м файл

@interface DashboardSixOptionViewController ()

@end

@implementation DashboardSixOptionViewController
@synthesize revealViewController = _revealViewController;
- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    NSLog(@"gesture desc::%@",self.revealViewController.panGestureRecognizer);


    [self.view addGestureRecognizer:self.revealViewController.panGestureRecognizer];
}
-(void)configureView
{
 [self.navigationController.navigationBar setTintColor:[UIColor orangeColor]];

    CGRect dashboardNavFrame = self.navigationController.navigationBar.bounds;
//    dashboardNavFrame.size.height += 5;

    self.toolBar = [[UIToolbar alloc] initWithFrame:dashboardNavFrame];

    [self.toolBar setAutoresizingMask:UIViewAutoresizingFlexibleWidth];

    [self.toolBar setTintColor:[UIColor redColor]];


    //disable any back btn
    self.toolBar.clearsContextBeforeDrawing = NO;
    self.toolBar.clipsToBounds = NO;
    [self.toolBar setTag:700];

    NSMutableArray *buttons = [[NSMutableArray alloc] init];


    UIImage *imgOption;

    imgOption = [UIImage imageNamed:@"imgOptionsIOS7.png"];

    UIButton *aOptionButton = [UIButton buttonWithType:UIButtonTypeCustom];
//    [aOptionButton setEnabled:NO];
    aOptionButton.frame = CGRectMake(0, 0, imgOption.size.width, imgOption.size.height);
    [aOptionButton setImage:imgOption forState:UIControlStateNormal];
//    [aOptionButton addTarget:self action:@selector(showLeftMenu:) forControlEvents:UIControlEventTouchUpInside];
    [aOptionButton addTarget:self.revealViewController action:@selector(revealToggle:) forControlEvents:UIControlEventTouchUpInside];


    UIBarButtonItem *btn = [[UIBarButtonItem alloc] initWithCustomView:aOptionButton];
    [btn setTarget:self.revealViewController];
    [btn setAction:@selector(revealToggle:)];
    [buttons addObject:btn];
  [self.toolBar setItems:buttons animated:YES];

    [self.navigationController.navigationBar addSubview:self.toolBar];

}

из контроллера представления DashboardSixOptionView программно нажмите программно ниже мой код

DashboardSixOptionView  = [mainStoryboard instantiateViewControllerWithIdentifier:@"DashboardStoryBoardWithSixOption"];
    DashboardSixOptionView.arrTableViewHreaders = self.arrForMenuOption;
    [self.navigationController pushViewController:DashboardSixOptionView animated:YES];

Пожалуйста, помогите мне, почему я получаю сбой.

Спасибо в продвинутом Приянке


person Priyanka    schedule 21.08.2015    source источник


Ответы (3)


Я предполагаю, что self.revealViewController.panGestureRecognizer это nil, потому что вы создали свойство для SWRevealViewController, но не присвоили никакого значения в viewDidLoad.

Вы правильно установили все классы в своей раскадровке?

Кроме того, почему вы используете @synthesize и переменную класса для своего SWRevealViewController? Больше нет необходимости делать это.

Я рекомендую вам ознакомиться с этим замечательным руководством по SWRevealViewController.

person WedgeSparda    schedule 21.08.2015
comment
Привет, спасибо за replay. Я только что попробовал создать свойство и @synthesize.. Перешел по этой ссылке appcoda.com/ios-programming-sidebar-navigation-menu, но по-прежнему возникает та же ошибка. - person Priyanka; 21.08.2015
comment
Нет, я имею в виду, что вам больше не нужно использовать синтез. Просто используйте свойство. Просто удалите эти строки: '@synthesize rejectViewController = _revealViewController;` (в файле .m) { SWRevealViewController *revealViewController; } (в файле .h) Еще раз проверьте учебник и проверьте, какие классы вы установили в своей раскадровке. Найдите его в Identity Inspector (правая панель, третий значок слева). - person WedgeSparda; 21.08.2015

Не создавайте новый объект для SWRevealViewController в файле DashboardSixOptionViewController.h или DashboardSixOptionViewController.m. Вместо него используйте тот же объект, который создан в классе SWRevealViewController.

Класс DashboardSixOptionViewController.m

#import "SWRevealViewController.h"
-(void)viewDidLoad{
_barButton.target = self.revealViewController;
_barButton.action = @selector(revealToggle:);
[self.view addGestureRecognizer:self.revealViewController.tapGestureRecognizer];
}
person Daya Kevin    schedule 21.08.2015
comment
создал панель инструментов с кнопкой панели и поместил эту панель на панели навигации UIButton *aOptionButton = [UIButton buttonWithType:UIButtonTypeCustom]; aOptionButton.frame = CGRectMake(0, 0, imgOption.size.width, imgOption.size.height); [aOptionButton setImage:imgOption forState:UIControlStateNormal]; [aOptionButton addTarget:self.revealViewController action:@selector(revealToggle:) forControlEvents:UIControlEventTouchUpInside]; - person Priyanka; 21.08.2015
comment
UIBarButtonItem *btn = [[UIBarButtonItem alloc] initWithCustomView:aOptionButton]; [кнопка setTarget:self.revealViewController]; [кнопка setAction:@selector(revealToggle:)]; [кнопки addObject:btn]; [self.toolBar setItems: анимированные кнопки: ДА]; [self.navigationController.navigationBar addSubview:self.toolBar]; - person Priyanka; 21.08.2015
comment
Из вашей раскадровки было замечено, что LeftMenuList является подклассом UIViewController. Это должен быть подкласс UITableViewController. Попробуйте это - person Daya Kevin; 21.08.2015
comment
Привет, Дая Кевин, я пробовал использовать подкласс табличного представления, но все равно получаю self.revealViewController.panGestureRecognize = nil из строки ниже [self.view addGestureRecognizer:self.revealViewController.panGestureRecognizer]; - person Priyanka; 24.08.2015

У меня была такая же проблема!! Если вы хотите подключиться к контроллеру представления меню, вы должны подключить его через swrevealviewcontrtoller, поэтому еще раз проверьте свои переходы, и это решило мою проблему, и я использовал.

[self.revealviewcontroller pangesturerecogonizer];

Вместо

[self.view addGestureRecognizer:self.revealViewController.panGestureRecognizer];
person Akshay    schedule 24.06.2017