objective-c - 通过 View Controller 将委托(delegate)传递给 View Controller

标签 objective-c ios ios5 uiapplicationdelegate segue

我的 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/

相关文章:

objective-c - 优胜美地 : NSSavePanel: __NSArrayI objectAtIndex:]: index 0 beyond bounds for empty array

objective-c - 自定义 iOS 手势

ios - 在 iOS 中处理后台任务的正确方法是什么

ios - 圆形/圆形 UIView Swift - 不是没有角半径的正方形

iOS Getter 和 Setter 混淆

ios - 为什么我无法使用 UISlider 降低亮度?

ios - 将收件人显示为 UIButton

iphone - AVCaptureSession 没有提供良好的照片质量和分辨率

ios - 选择指示器未显示在操作表内的选择器 View 中

iphone - 我们可以在应用程序中使用苹果相册图像吗?