zoukankan      html  css  js  c++  java
  • ios程序中传值的几种方式

    通常情况下,在进行IOS程序设计时,我们通常需要将一些值进行传递,当Push一个ViewController时,我们一般都会使用属性进行传值,这样就会很容易满足我们的需求,但有些情况下,我们也需要将值从被Push的controller的值传递给上一级controller,这时,该属性就不能满足我们的需求,下面介绍几种传值的方法:

    (一)使用属性传值:这是一种最简单也是最常见的方式,由于该方法是基本方法,就不一一介绍了;

    (二) 使用NSUserdefault来储存值,由于NSUserdefault是一个单例对象,因此他在整个程序运行过程中,都能够保持数据的唯一性,由于这个比较简单,就不举实例了;

    (三)使用协议的方式进行传值,协议是传值的另一种有效且有用的方式:

      通常的做法是:

      (1)首先在需要传值的controller里添加一个协议(注意一定是在.h文件里)

      @protocol tableViewSelectResultDelegate <NSObject>

      - (void)popoverViewSelectedResult:(NSDictionary *)resultDic;

      @end

      (2)在.m文件里我们需要在需要传值的地方调用该协议方法

      if ([self.delegate respondsToSelector:@selector(popoverViewSelectedResult:)]) {

            [self.delegate popoverViewSelectedResult:dic5];

        }

      (3) 在需要接受该值的地方,我们要遵该协议,并实现该协议,对传进来的数值进行相关处理

      - (void)popoverViewSelectedResult:(NSDictionary *)resultDic

      {

        NSLog(@"%@",resultDic);

      }

    (四) 使用block块来进行传值

      在程序进行过程中,使用block块来进行传值是一种比以上方法更加行之有效的方法,也更加简洁方便:其基本原理就是,在哪个controller中调用另外一个对象的block方法或属性,那么该controller就可以获得由该方法或属性所带来的另一个对象的某些值。

      下面是一个示例,用来说明block块在传值时候的特性:

      (1)设置属性

      @property (nonatomic, copy) void (^selectRowAtIndex)(NSInteger index);

      (2)并在值改变的地方进行block传值:

      if (self.selectRowAtIndex) {

            self.selectRowAtIndex(indexPath.row);

        }

      (3)最后在另外的一个controller中调用他的这个属性:

      popview.selectRowAtIndex = ^(NSInteger index){ NSLog(@"select index:%d", index); };

      注意:当在(2)在执行时,会自动调用(3)中的属性,并且整个执行过程中,这个属性只会调用一次,也就是说,如果你在其他地方写了这个属性,那么他可能会调用其他的方法而不会调用(3)中的输出值函数。

        

  • 相关阅读:
    适合于小团队产品迭代的APP测试流程
    【转】软件测试上线标准
    安全性测试之修改密码
    LoadRunner 实现监控Tomcat
    【转】人生应该接受的教育
    晓光聊《小厂如何做测试》
    由测试需要多少编程知识想到的
    12款很棒的浏览器兼容性测试工具推荐
    最近感悟测试人员需要的一种能力
    APP测试功能点总结
  • 原文地址:https://www.cnblogs.com/yuanjianguo2012/p/4074236.html
Copyright © 2011-2022 走看看