gpt4 book ai didi

ios - 未调用自定义委托(delegate)方法

转载 作者:行者123 更新时间:2023-12-01 18:48:22 25 4
gpt4 key购买 nike

看下面的代码。

CusFormViewController.h

@interface CusFormViewController : CusBaseViewController

@protocol CusFormViewControllerDelegate <NSObject>
-(void)ticketCreated:(NSString*)ticketID;
-(void)ticketFormRenderingFinished;
@end

@property (nonatomic, weak) id<CusFormViewControllerDelegate> delegate;

CusFormViewController.m
if ([self.delegate respondsToSelector:@selector(ticketFormRenderingFinished)])
[self.delegate ticketFormRenderingFinished];

if ([self.delegate respondsToSelector:@selector(ticketCreated:)])
[self.delegate ticketCreated:ticket_id];

ViewController.m
#import "CusFormViewController.h"

@interface ViewController ()<CusFormViewControllerDelegate>

- (void)viewDidLoad {
[super viewDidLoad];

CusFormViewController *formVC = [[CusFormViewController alloc] init];
[formVC setDelegate:self];
}

-(void)ticketCreated:(NSString*)ticketID{
NSLog(@"ticket created.");
}
-(void)ticketFormRenderingFinished{
NSLog(@"ticket form rendered.");
}
ticketCreated & ticketFormRenderingFinished没有被调用。

最佳答案

未调用委托(delegate)方法的最常见原因是处理不正确的对象。

  • 确保 CusFormViewController从创建的对象ViewController与您在屏幕上呈现的相同,并且
    委托(delegate)被设置在同一个对象上。我真的相信
    您正在创建一个新的 CusFormViewController对象和设置
    对此进行委托(delegate)。
  • CusFormViewController ,在调用委托(delegate)之前,检查
    委托(delegate)的存在也是如此。这是一个安全检查,你也可以放一个
    NSLog 语句仔细检查您的委托(delegate)是否存在。你
    在这里失败了。
  • 如果您从 ViewController 开始至CusFormViewController然后在 prepareForSegue: 中设置委托(delegate)而不是 viewDidLoad .

  • 作为旁注,请输入 NSLog viewDidLoad 中的声明您的 CusFormViewController并打印 self.delegate检查属性设置。

    关于ios - 未调用自定义委托(delegate)方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33142598/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com