我的 Storyboard中有三个 viewController,每个都有三个 viewController 类。在我的主 viewController 中,我在“模式”类型的 segue 中打开一个导航 viewController,这是一个多步骤表单,其中有两个 View 。当用户在最后一个(第二个) View 上点击“完成”时,模式将被关闭,用户将返回到主屏幕。
我正在与代表们一起做这件事。完成按钮的代码也在委托(delegate)中,并放在主 viewController 的实现文件中。为了实现这一点,我将委托(delegate)从主视图传递到导航的第一个 View ,然后从第一个 View 单击“下一步”,我将委托(delegate)传递到第二个(最后一个) View (具有完成按钮)。
委托(delegate)从主页面传递到导航的第一页是这样的:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([segue.identifier isEqualToString:@"CreateCast"])
{
UINavigationController *navigationController = segue.destinationViewController;
CreateCastStepOneVC *createCastStepOneVC = [[navigationController viewControllers] objectAtIndex:0];
createCastStepOneVC.delegate = self;
}
}
委托(delegate)从导航的第一个 View 传递到第二个 View 是这样的:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([segue.identifier isEqualToString:@"ToCastStepTwo"])
{
CreateCastStepTwoVC *createCastStepTwoVC =
segue.destinationViewController;
createCastStepTwoVC.delegate = delegate;
}
}
事情做得很好,代表正在按要求完成工作。但是会弹出一个警告,这是一个问题:
Passing '_weak id' to parameter of incompatible type 'id'
第一个导航 View 中的属性声明是这样的:
@property (nonatomic, weak) id <CreateCastStepOneVCDelegate> delegate;
属性声明是第二个导航 View 是这样的:
@property (nonatomic, weak) id <CreateCastStepTwoVCDelegate> delegate;
最佳答案
您如何在 CreateCastStepTwoVC
上声明委托(delegate)属性?还,
您的代表是否遵守您定义的协议(protocol)?
委托(delegate)属性的典型声明如下所示:
@property (nonatomic, __unsafe_unretained) id<MyProtocol> delegate;
或者如果您没有使用协议(protocol)(不推荐):
@property (nonatomic, __unsafe_unretained) id delegate;
编辑:
看到您的属性声明后,您需要根据以下问题将 weak
更改为 __unsafe_unretained
:Recommended way to declare delegate properties with ARC
关于objective-c - 通过 View Controller 将委托(delegate)传递给 View Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9428879/