设置代表崩溃

我有一个自定义视图(settingview)与笔尖和协议。 我想用delegate在viewcontoller上添加这个视图。 当我设置它的委托我的应用程序崩溃,我不知道我做错了什么。

我没有用于ViewController的NIB。

我附上我的代码和视图的NIB的几个图像。

 -  [UIView setDelegate:]:无法识别的选择器发送到实例0xb265e20

。H

@protocol SettingViewDelegate @required -(void)CornerSlider:(id)sender; -(void)MarginSlider:(id)sender; -(void)BorderSlider:(id)sender; -(void)ShadowSlider:(id)sender; -(void)BorderColor:(id)sender; -(void)ShadowColor:(id)sender; -(void)remove:(id)sender; @end @interface SettingView : UIView @property (nonatomic, assign) id delegate; -(IBAction)CornerSlider1:(id)sender; -(IBAction)MarginSlider1:(id)sender; -(IBAction)BorderSlider1:(id)sender; -(IBAction)ShadowSlider1:(id)sender; -(IBAction)BorderColor1:(id)sender; -(IBAction)ShadowColor1:(id)sender; -(IBAction)remove1:(id)sender; @end 

.M

 @implementation SettingView - (id)initWithFrame:(CGRect)frame { self = [super initWithFrame:frame]; if (self) { self = [[[NSBundle mainBundle] loadNibNamed: @"Setting" owner: self options: nil] objectAtIndex:0]; } return self; } -(IBAction)CornerSlider1:(id)sender { [self.delegate CornerSlider:sender]; } -(IBAction)MarginSlider1:(id)sender { [self.delegate MarginSlider:sender]; } -(IBAction)BorderSlider1:(id)sender { [self.delegate BorderSlider:sender]; } -(IBAction)ShadowSlider1:(id)sender { [self.delegate ShadowSlider:sender]; } -(IBAction)BorderColor1:(id)sender{ [self.delegate BorderColor:sender]; } -(IBAction)ShadowColor1:(id)sender{ [self.delegate ShadowColor:sender]; } -(IBAction)remove1:(id)sender{ [self.delegate remove:sender]; } @end 

意见笔尖

应用程序设置其委托后崩溃。

 SettingView *settingView=[[SettingView alloc]init]; [settingView setDelegate:self]; [self.view addSubview:settingView]; 

将@requiredreplace为@optional

 @protocol SettingViewDelegate @optional -(void)CornerSlider:(id)sender; -(void)MarginSlider:(id)sender; -(void)BorderSlider:(id)sender; -(void)ShadowSlider:(id)sender; -(void)BorderColor:(id)sender; -(void)ShadowColor:(id)sender; -(void)remove:(id)sender; @end 

看看你是否已经把你的委托的所有方法实现到你的“设置视图”的“self.view”类中。 此外,看看你是否已经实现“SettingsViewDelegate”到您添加“设置视图”作为子视图的类。

有关更多说明,请参阅https://stackoverflow.com/a/12660523/859001

你试过了吗

 @interface BlaBlaViewController : UIViewController<SettingsViewDelegate> 

我在你的代码中看到:

 -(void)setDelegate:(id)delegate { self.delegate = delegate; } 

这将导致无限循环。 你应该使用合成的_ivar来重载setter(或者把它全部放在一起)。

发现错误。 这是在IB。 我正在设置自定义类(SettingView)文件的所有者类。 现在它的视图的自定义类和文件的所有者是UIView的类。

在这里输入图像说明

现在工作正常。

在SettingsView实现中使用以下setter方法进行委托。

 -(void)setDelegate:(id)adelegate { _delegate = adelegate; } 

尝试这个 –

。H

 @protocol SettingViewDelegate -(void)CornerSlider:(id)sender; -(void)MarginSlider:(id)sender; -(void)BorderSlider:(id)sender; -(void)ShadowSlider:(id)sender; -(void)BorderColor:(id)sender; -(void)ShadowColor:(id)sender; -(void)remove:(id)sender; @end @interface SettingView : UIView @property (nonatomic, assign) id delegate; -(IBAction)CornerSlider1:(id)sender; -(IBAction)MarginSlider1:(id)sender; -(IBAction)BorderSlider1:(id)sender; -(IBAction)ShadowSlider1:(id)sender; -(IBAction)BorderColor1:(id)sender; -(IBAction)ShadowColor1:(id)sender; -(IBAction)remove1:(id)sender; @end 

.M

 -(IBAction)CornerSlider1:(id)sender { if([self.delegate respondsToSelector:@(CornerSlider:)]) { [self.delegate CornerSlider:sender]; } } -(IBAction)MarginSlider1:(id)sender { if([self.delegate respondsToSelector:@(MarginSlider:)]) { [self.delegate MarginSlider:sender]; } } -(IBAction)BorderSlider1:(id)sender { if([self.delegate respondsToSelector:@(BorderSlider:)]) { [self.delegate BorderSlider:sender]; } } -(IBAction)ShadowSlider1:(id)sender { if([self.delegate respondsToSelector:@(ShadowSlider:)]) { [self.delegate ShadowSlider:sender]; } } -(IBAction)BorderColor1:(id)sender{ if([self.delegate respondsToSelector:@(BorderColor:)]) { [self.delegate BorderColor:sender]; } } -(IBAction)ShadowColor1:(id)sender{ if([self.delegate respondsToSelector:@(ShadowColor:)]) { [self.delegate ShadowColor:sender]; } } -(IBAction)remove1:(id)sender{ if([self.delegate respondsToSelector:@(remove:)]) { [self.delegate remove:sender]; } }