-
NSUserDefaults 传值方法是系统帮我们封装好的。也是将数据写入到文件中,不需要自己去创建文件。默认在沙盒路径中存储我们的数据
查看全部 -
NSUserDefaults传值:
每一个工程在创建之后都有一个默认的沙盒路径。
通过一个页面将数据通过NSUserDefaults的方法写入到沙盒文件中,另一个文件通过沙盒文件读取数据
和单例传值比较接近,比较像,只不过单例是在内存中传值
查看全部 -
单例传值:得有个单例对象。所以就要创建一个单例类。单例对象的创建其实就是保证对象在程序运行过程中只有一个。就是说 每次通过类方法调用单例对象的时候都是同一个对象就可以了。
都是同一个对象:那么就必须通过静态变量的方式来进行创建。静态变量一旦被赋值之后,下次再读取的是上一次的值
首先需要有一个类方法。
实现类方法来创建单例对象。
查看全部 -
页面传值:
1:属性传值:主要运用于正向传值。不可以进行反向传值。也不能进行跨页面的传值。
2:单例传值:可以实现正向、反向、跨页面传值。数据是写入内存中,然后再从内存中读取数据
不好的点:必须要创建一个单例对象才可以 。创建单例对象需要创建单例类
3:NSUserDefaults传值:与单例传值相像。它是将数据写入沙盒文件中,再从沙盒文件中读取数据
4:代理传值:最经典最常用的传值方式。主要用于反向传值,而且是一对一的,必须要两个页面之间建立代理关系。
5:block传值:代理传值能做的,block传值都能做。也是一对一,页面也要建立关系之后才能传值
6:通知传值:可以进行跨页面之间的传值。多对多的传值方式。发送方发送一个值,任何一个接收方都可以接收。所以接收方接收的通知,可以来自任何发送方
查看全部 -
属性传值 单例传值 NSUserDefault传值 Delegate传值(常用) Block传值(常用)查看全部
-
几种常见的页面传值方式:
属性传值:主要用于正向传值,比较简单,过于单一,不能进行反向传值,也不能进行跨页面的传值
单例传值:比较强大,可以实现跨页面,正向反向都可,但是要自己创建一个单例类,将数据写至内存
NSUserDefaults传值:与单例传值较像,但是是将数据写至沙盒文件中,再进行读取数据
代理传值:主要用于反向传值,而且必须为一对一关系传值
block传值:可以做代理传值能做的事,且代码较为简介,但是也是一对一的关系传值
通知传值:可多对多,可跨页面传值,接收方接受的通知可来自于任何一个发送方
查看全部 -
通知传值111
查看全部 -
block传值
查看全部 -
代理页面传值
查看全部 -
NSUserDefaults传值
查看全部 -
通知传值
我们需要一个发送方和一个接收方
接收方先去监听,模拟从页面2 通过通知的方式传值到页面1,页面1自然就是接收方,那么接收方首先是需要来监听的,我们先看一下,我们需要监听来等待这个消息,所以我们先在页面1 来监听通知,在哪个位置好呢,跳转至页面2之前我们先来做一个监听,还没有到页面2 呢我先来监听页面2 的消息,你什么时候发 ,我这边自然就可以收到了,所以呢,在跳转至页面2之前 添加监听。那么这个监听呢,我们注意一下是通过通知中心的方式也就是说给通知中心就是我们的广播站来添加一个观察者也就是监听者,那我们的通知中心是怎么创建的。
[NSNotificationCenter defaultCenter]addObserver:<#(nonnull id)#> selector:<#(nonnull SEL)#> name:<#(nullable NSNotificationName)#> object:<#(nullable id)#>
这就是我们的通知中心 给他添加一个监听者addObserver就是我们的self我们的接收方,selector是我们接收到通知之后的一个处理
notHandle:带一个参数,参数就是我们的通知。name是什么呢 name就是通知的名字,你要监听哪一个通知,所以呢notify就是通知的名字,
object这个参数填nil就行了,也就是你监听来自哪里的通知,填nil的话表示广播群发的,任何一个发送方只要发送了一个叫notify的通知,我们都可以收到。所以呢我们就添加好了这个观察者了,然后呢我们来实现
notHandle的方法
就是我们收到通知之后的一个处理,那么他需要一个参数就是我们的通知
回到页面2去发通知,在点击回到页面1的时候进行传值,发送通知要通过广播站来发送就是我们的通知中心
查看全部 -
协议和block页面传值应用于两个有直接跳转关系的页面之间的传值
通知传值相对来说更灵活 特别是在实现跨页面之间跳转的时候
和我们生活里的通知是一样的,需要有一个发送方和一个接受方,例如广播站,广播员就是我们的发送方他是广播数据的,而接收方就是我们的收音机,是用来接收数据的,发送方和接收方之间如果要进行通讯的话,那么需要一个中间介质,就是我们的通知中心,也就是我们生活里面的广播站,如果没有广播站的话 ,广播员和收音机之间是无法进行通讯的,所以代码里面的通知中心就模拟了广播站的概念,发送方是发送数据 ,接收方是接收数据的,但是在代码里面,我们需要注意的是我们要先在接收方定义一个观察者来等待通知中心发出的消息,那么当他等待之后,发送方将通知发送出去,先发送到通知中心,然后通知中心拿到数据再回调给我们的接收方。这就是通知传值的一个过程。
为什么要先观察后发送呢,其实很简单 ,生活中也是一样
如果广播员先去广播通知,你的收音机还没有打开,当你的收音机打开之后再去监听的话可能已经广播完了,你没有听到,所以如果你想收到广播的通知,那么你必须首先打开收音机监听这段通知,当通知来的时候就可以收到这份通知并且做后续的处理工作,那我们代码也是一样处理的,我们接收方要先观察等待通知中心的消息,然后通知我们的发送方发送了通知,我们的通知中心自然就把消息转播到接收方了。所以这就是通知传值的一个过程
查看全部 -
block传值主要应用于反向页面传值,我们需要在第二个页面定义一个block用来传值
定义一个属性 为了防止block的循环引用,block一搬都定义为copy属性
@property (copy) void (^block) (NSString*);也传递一个字符串
返回值类型 block的名字 block的参数 ^block的标志
看到小箭头一定是个block
//定义一个block进行反向传值
一个block定义好了,block写法相对来说麻烦了一些,但是非常好用,建议大家经常去使用block,用多了自然就写熟了
页面2 跳转回页面1 的时候进行传值
直接调用self.block()传值就可以了 他的传值方式 也和C语言一样,可以理解为block就是一个C语言函数,小括号就是C语言里的小括号,小括号里面传递的就是我们的实参
//block传值--反向传值
self.block(self.textField.text);
回到页面1 如何来接收这个block呢,block不像协议 实现协议方法就可以了,block需要实现的话 它是一个对象的属性,我们要向实现block就是实现这个对象的属性,所以我们在创建页面2 的时候,我们就要实现这个block.
一面传值 一面接收值
查看全部 -
block传值
苹果最推荐也是目前最为流行的一种传值方式,它和代理传值做着一样的工作,代理传值能做的工作block都能做,他比代理传值写法更简单更容易理解一些,这是近两年苹果主推的一种传值的方式。
页面1跳转到页面2 页面2回调block进行传值
页面1只需要实现block接收数据就可以了
简单在不需要设置代理也不需要定义一个协议
查看全部 -
代理传值的整个过程。
代理传值主要是反向传,那么反向传我们从页面2将值传递到页面1 ,页面2 就是我们的委托方,委托方是持有协议并且调用协议方法,而且我们的协议也是定义在委托方的,首先来看一下协议怎么定义,
@protocol passValueDelegate <NSObject>
一个传值的这么一个代理
定义一个方法,这个方法有一个参数也就是我们要传递的值,那看你传什么值了,如果是字符串就定义一个字符串,如果是某一个类的对象那你就定义一个对象就行了,我们用字符串来演示一下.
//委托方-创建一个协议
@protocol passValueDelegate <NSObject>
//协议定义一个传值的方法
-(void)passValue:(NSString*)str;
@end
协议创建好了
那么委托方需要做的事情就是持有协议、然后呢再去调用协议方法传值就可以了
所以呢我们要持有协议的话我们需要一个weak id指针 一个id指针他是持有协议的,持有协议怎么来表现呢尖括号里面写上协议的名字就可以了,
这就是定义一个id指针,它呢持有了协议,指针的名字就叫delegate,指针的名字可以自己来取,代理呢为了防止循环引用一般使用weak来定义
持有协议之后接下来就是调用协议方法来进行传值
点击页面2button的时候我们来调用我们的方法
//代理传值--反向传值
这里呢使用我们的id指针 self.delegate调用我们协议的方法
passValue
传值传谁呢 就传我们textfile里面输入的值
[self.delegate passValue:self.textField.text];
这样就实现了代理的反向传值
那么页面2 通过协议将这个值传递之后,发出去之后 那页面1 怎么来接收呢
那就是我们的代理方了,代理方需要做两个事情就是遵守协议,实现协议方法。
遵守协议怎么来遵守呢
@interface ViewController ()<passValueDelegate>//遵守协议
并且实现协议方法
//代理传值--实现协议方法--接收来自页面2的值
-(void)passValue:(NSString *)str
接收来自页面2的值 :self.textField.text
我们并没有设置代理,两方如果通讯需要先把代理关系设置好才可以,
代理关系在哪设置,就是在我要通话的时候,第一个页面跳转至第二个页面的时候,需要先把代理关系设置好,设置好之后才可以进行通讯,才可以从第二个页面将值传回到第一个页面.将第二个页面他的代理设置为第一个页面(self)。
查看全部 -
代理传值在iOS中是非常重要的传值方式也是用的最多的传值方式,相对来说要比前面三种麻烦一些。
代理传值需要有两个页面,分别是委托方和代理方
委托方和代理方要进行通讯的话,必须得先有一个协议,和生活里面也是一样的,中介 和 小名之间需要有一份协议,协议就规定了这两方之间如何进行通讯 ,也就是它做了一个约束,大家都遵守这个约束,就可以进行通讯了。
代理传值在iOS中的表现就是
委托方 呢持有协议并且调用协议方法
代理方呢遵守协议实现协议方法
我们如果想传值的 话,委托方持有协议调用协议方法进行传值
而代理方只要遵守了这个协议并且实现协议的方法 就可以接收委托方传过来的值,所以呢这就是我们的代理传值。他呢主要是围绕协议进行的,如果没有了协议没有了这个约束,那么两方是不能进行通讯的,所以这就是我们的代理传值。主要是应用于反向传值的。也就是说我们从页面1跳转到页面2 然后页面2反向给页面1进行传值,我们可以通过代理的方式来进行传递。
查看全部 -
如果是反向传值,在页面2 回到页面1的时候,
NSUserDefault传值也可以实现跨页面的传值
查看全部 -
NSUserDefault传值
这个传值比较简单 就是系统帮我们封装好的方法,也是将数据写入到文件中,不需要我们自己去创建文件,默认在沙盒路径中创建一个文件来存储我们的数据。
[[NSUserDefaults standardUserDefaults] setObject:@"NSUserDefaults传值" forKey:@"NSUserDefaults"];
以上实现了NSUserDefaults写数据
写数据之后我们需要同步一下才能真正写入到我们的文件中。
写入到文件之后,第一个页面就完成了
第二个页面需要读取数据,在我们的文件中读取就行了
写入的时候以字典的方式写入,读取的时候以字典的方式读取,key就是刚才写入的key,一定要保持一致。以及唯一性,唯一性就是如果有多个
@"NSUserDefaults"保证key不能重复,一致性就是读的和写的必须是同一个key。
将数据从页面1传递到了页面2
查看全部 -
NSUserDefaults传值
首先得有两个页面,页面1 页面2
沙盒文件,每一个工程创建之后都有一个默认的沙盒路径
通过一个页面将数据写入到沙盒文件中(通过NSUserDefaults的方式写入)
另一个页面在沙盒文件中读取数据就行了
和单例传值比较接近 比较像,只不过单例传值我们是在内存中创建了一个单例对象
现在是将我们的数据写入到磁盘也就是沙盒文件中
传值的方式是差不多的
查看全部 -
单例传值
两个页面 一个单例对象
其中一个页面将数据写入到单例对象
另一个页面从单例对象读取数据
就实现了页面之间的数据传递 将一个页面的数据传入到另外一个页面,通过单例的方式来传递。
单例传值必须有一个单例对象。
创建一个单例对象,单例的创建
单例的创建
通过类方法创建单例对象
保证对象就是在程序运行过程中只有一个就可以了,每次通过类方法来调取单例的时候都是同一个对象就可以了。
要想保证这个过程,通过静态变量的方式来进行创建,因为静态变量一旦被赋了值之后 下次再读取的是上一次的值,和普通的局部变量不一样。
先通过静态变量的方式来创建一个变量
单例对象如何来传值呢
属性传值,在第一个页面向第二个页面跳转的时候,给第二个页面的属性赋了值,这就是属性传值
单例传值和属性传值也差不多,如果是正向的就可以给这个对象来赋值了。
先拿到单例对象,要通过单例来传值,比如也传递一个字符串,
从页面2给页面1传值通过单例也可以实现
在页面2点击button回到页面1的时候可以传递回一个值
查看全部
举报