2020-02-17 23:12:31.949254 + 0100 LoyaltyCardsApp [64133:7104122] ***由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:'-[OTPViewController OTPPinInserted:pin:]:无法识别的选择器已发送至实例0x7fd00a127730'

    @protocol OTPViewControllerDelegate
- (void) OTPAbortedByUser;
- (void) OTPPinInserted: (NSString *) pan pin: (NSString *) pin;


@end

@interface OTPViewController : UIViewController<KeyboardDelegate>

@property (nonatomic, strong) id delegate;

@property (nonatomic, weak) IBOutlet UIButton *confirmButton;
@property (weak, nonatomic) IBOutlet InputTextView *insertOTP;
@property (nonatomic, strong) NSString* stringInserted;
@property (weak, nonatomic) IBOutlet CopyableTextView *result;

@property (nonatomic, weak) IBOutlet NSLayoutConstraint *marginTop;

- (IBAction) clickOnDoneButton:(id)sender;
@end


- (void) pinInserted:(NSString *) pin{

    [self.delegate OTPPinInserted:self.insertOTP.input.text pin:pin];

崩溃发生在这里:
    [self.delegate OTPPinInserted:self.insertOTP.input.text pin:pin];

另一件事,我不明白为什么在调试中我不能进入if ..
if (self.delegate && [self.delegate respondsToSelector:@selector(OTPPinInserted:pin:)]){
    [self.delegate OTPPinInserted:self.insertOTP.input.text pin:pin];
}

最佳答案

这是因为您尚未在OTPViewController上实现OTPViewController协议(protocol)。

或者,更具体地说,您需要实现此方法:

- (void) OTPPinInserted: (NSString *) pan pin: (NSString *) pin;

(或者,如果您实施了,则拼写正确。:)。

请注意,在方法名称前加上大写字母有点奇怪。

我会坚持使用-pinInserted:pin:。如果方法声明冲突,通常表明存在其他设计问题。

如果使用前缀路由,则将其小写; -otpPinInserted:pin:

10-04 14:50