zoukankan      html  css  js  c++  java
  • ios Block解决循环引用和回传值

    存在这么一个需求:为了降低控制器的耦合度,自定义了视图控件,但是现在另外一个页面需要显示自定义视图上的值;需要用block回调到控制器中来显示

    啰嗦了一大堆,说个简单明了的(需求:B控制器要向A控制器传值)。

    1.首先第一步要在B控制器中定义block 例如:

    #import "BViewController.h"

    typedef void (^ AnswerBlock)(NSString *resutlStr);

    @class GXRiskRelatedQuery;

    @interface GXRiskViewController : BViewController 

    @property (nonatomic, copy) AnswerBlock answerBlock;

    @end

    2.来到B控制器的.m文件中,(回调的是网络数据,所以呢,应该在B控制器的网络请求成功的地方实现这个block)

    #pragma mark 提交风险测评答案接口

    - (void)requestDataWithRisksubmit:(NSString *)answerString

    {

        NSDictionary *params = @{@"fundid" : [[GXSharedClass sharedClass] GXAccount],

                                 @"answers": answerString};

        MJLog(@"params == %@",params);

        [GXRisksubmit requestWithParams:params result:^(NSInteger respCode, NSString *respMsg, id responseObject) {

            if (respCode == 1) {

                

                GXRisksubmit *riskSubmit = (GXRisksubmit *)responseObject[0];

                self.messageStr = riskSubmit.message;

                [self setupAlertView];

         // 这个是判断模型是否有数据的

                if (riskSubmit.isHaveData) {

                   if (self.answerBlock) {

                        self.answerBlock(riskSubmit.risktype);// 这个是回调的值,也就是从模型中取得的值,也就是在A控制器中要显示的值

                    }

                    

                }

                

            }

        }];

        

    }

    3.然后来到A控制器中实现以下方法

    首先需知道A控制器在那个地方push到B控制器中的(我写的项目我知道是在哪里push的)

    B控制器 *BVC = [[B控制器 alloc] init];

                __weak A控制器 *__self = self;  // 此代码是解决循环引用的

                riskViewVC.answerBlock = ^(NSString *answer){

                    [__self receiveAnwser:answer];

                };

                [self.navigationController pushViewController:BVC animated:YES];

     

    4.最后还得实现一个方法(此方法是用来赋值的)

    -(void)receiveAnwser:(NSString *)resultStr

    {

        _guardLabel.text = resultStr;

        [GXSharedClass sharedClass].riskValue = resultStr;

    }

     

    1
  • 相关阅读:
    CCNET的部分配置使用说明
    用Visual C++实现PDF文件的显示
    开发流程中的可用性
    TCP/IP学习笔记(一)
    使用 Microsoft 实时通信 API 增强多客户端通信
    TCP/IP学习笔记(二)IP网际协议
    DDE热链接
    软件设计中的可用性
    封包技术
    使用MFC开发ActiveX控件
  • 原文地址:https://www.cnblogs.com/fantasy3588/p/4627396.html
Copyright © 2011-2022 走看看