【问题标题】:setDelegate to my custom view controller fall with unrecognized selectorsetDelegate 到我的自定义视图控制器落下无法识别的选择器
【发布时间】:2014-12-10 20:54:22
【问题描述】:

我在 StoryBoard 上有一个带有自定义类的视图控制器。代码如下:

BGMDatePickerViewController.h

#import <UIKit/UIKit.h>

//declare a protocol with name
@protocol DatePickerViewControllerDelegate        //declare a delegate so that this class can notify another class when a user selects a chart
//protocol methods
//- (void)userDataChangedWithUsername;

@end


//declare a class with inheritance
@interface BGMDatePickerViewController : UIViewController <UIPickerViewDelegate, UIPickerViewDataSource, UITextFieldDelegate>


//create a public property
@property (weak, nonatomic) id<DatePickerViewControllerDelegate> delegate;   //property to store the delegate


@end

我想在另一个带有委托的 ViewController 上显示这个 ViewController。这里的代码: BGMChartViewController.h

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

//declare a class with inheritance
@interface BGMChartViewController : UIViewController <UIActionSheetDelegate, DatePickerViewControllerDelegate>  //conforms UIActionSheetDelegate and my custom DatePickerViewControllerDelegate protocols

//create a public IB methods
- (IBAction)showDateEntryForm:(id)sender;           

@end

BGMChartViewController.m

#import "BGMChartViewController.h"

@interface BGMChartViewController ()

//create a private properties
@property (strong, nonatomic) UIPopoverController *datePickerPopover;
@end


@implementation BGMChartViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
}

- (void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:NO];
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
}


- (IBAction)showDateEntryForm:(id)sender
{
    DDLogVerbose(@"%s: has been started...", __FUNCTION__);

    BGMDatePickerViewController *datePickerVC = [self.storyboard instantiateViewControllerWithIdentifier:@"dateEntryFormVC"];

    datePickerVC.delegate = self;   //HERE THE FALL!!!!!

    self.datePickerPopover = [[UIPopoverController alloc] initWithContentViewController:datePickerVC];

    //define the popover size
    self.datePickerPopover.popoverContentSize = CGSizeMake(320.0, 400.0);

    //let’s display it
    [self.datePickerPopover presentPopoverFromRect:[(UIButton *)sender frame]
                                            inView:self.view
                          permittedArrowDirections:UIPopoverArrowDirectionAny
                                          animated:YES];

}

@end

在我标记它的那一行上:

-[BGMDatePickerViewController setDelegate:]: unrecognized selector sent to instance 0x78a3bcf0
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[BGMDatePickerViewController setDelegate:]: unrecognized selector sent to instance 0x78a3bcf0'

如果我评论这个问题行,我可以看到我的自定义视图控制器,这意味着我可以使用 instantiateViewControllerWithIdentifier 标记... 我不明白我做错了什么?

【问题讨论】:

    标签: ios objective-c uiviewcontroller delegates


    【解决方案1】:

    修改为下面一行并检查:-

    @protocol DatePickerViewControllerDelegate<NSObject>
    

    【讨论】:

    • 虽然这是一个很好的更改,但不会影响错误。
    • 不幸的是它没有帮助。请问有什么想法吗? (((
    猜你喜欢
    • 2018-05-05
    • 2016-02-09
    • 1970-01-01
    • 2015-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多