控制器之间的数据传递——NSUserDefaults传值

原创 2016年08月30日 11:00:24

NSUserDefaults传值

使用偏好设置(NSUserDefaults)传值实质是一个控制器把数据持久化于沙盒,另一个控制器再从沙盒读取对应的文件获取数据,它是一种以文件进行传值的方式。

一. 实现步骤

  1. 在界面2中,声明NSUserDefaults变量,并往NSUserDefaults对象中添加要传递的数据

  2. 在界面1中,声明NSUserDefaults变量,通过对应的健取出对应的数据

二. 具体代码

1. AppDelegate类

---------- AppDelegate.m文件

#import "AppDelegate.h"
#include "OneViewController.h"

@interface AppDelegate ()

@end

@implementation AppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

  // 1. 创建窗口
  self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];

  // 2. 创建窗口的根控制器
  // 2.1 创建导航控制器的根控制器
  UIViewController *oneVc = [[OneViewController alloc] init];
  // 2.2 创建导航控制器
  UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:oneVc];
  // 2.3 给窗口设置根控制器
  self.window.rootViewController = nav;

  // 3. 设置窗口为主窗口并显示窗口
  [self.window makeKeyAndVisible];

  // 隐藏导航控制器的导航条
  nav.navigationBarHidden = YES;

  return YES;
}

@end

2. OneViewController类

---------- OneViewController.m文件

#import "OneViewController.h"
#import "TwoViewController.h"

@interface OneViewController ()

@property (nonatomic,strong) UITextField *textField;

@end

@implementation OneViewController

- (void)viewDidLoad {
  [super viewDidLoad];

  //设置控制器View的背景颜色
  self.view.backgroundColor = [UIColor greenColor];

  // 创建点击按钮
  UIButton *clickBtn = [UIButton buttonWithType:UIButtonTypeCustom];
  clickBtn.frame = CGRectMake(10, 100, 80, 40);
  clickBtn.backgroundColor = [UIColor whiteColor];
  [clickBtn setTitle:@"到界面2" forState:UIControlStateNormal];
  [clickBtn setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
  [clickBtn setTitleColor:[UIColor redColor] forState:UIControlStateHighlighted];
  [clickBtn addTarget:self action:@selector(btnClick) forControlEvents:UIControlEventTouchUpInside];
  [self.view addSubview:clickBtn];

  // 创建文本框
  _textField = [[UITextField alloc] initWithFrame:CGRectMake(10, 150, 250, 40)];
  _textField.borderStyle = UITextBorderStyleRoundedRect;
  _textField.backgroundColor = [UIColor whiteColor];
  [self.view addSubview:_textField];

}

#pragma mark - 点击事件

- (void)btnClick {

  // 创建界面2,并压入栈
  TwoViewController *twoVc = [[TwoViewController alloc] init];
  [self.navigationController pushViewController:twoVc animated:YES];

}

- (void)viewWillAppear:(BOOL)animated {

   // 创建NSUserDefaults单例对象,它可以把数据以Plist文件形式存储于沙盒中,也可从沙盒中读取对应的Plist文件
  NSUserDefaults *passData = [NSUserDefaults standardUserDefaults];
  //获取数据
  _textField.text = [passData objectForKey:@"passData"];

}

@end

3. TwoViewController类

---------- TwoViewController.m文件

#import "TwoViewController.h"

@interface TwoViewController ()

@property (nonatomic,strong) UITextField *textField;

@end

@implementation TwoViewController

- (void)viewDidLoad {
    [super viewDidLoad];

  //设置控制器View的背景颜色
  self.view.backgroundColor = [UIColor yellowColor];

  // 创建点击按钮
  UIButton *clickBtn = [UIButton buttonWithType:UIButtonTypeCustom];
  clickBtn.frame = CGRectMake(10, 100, 80, 40);
  clickBtn.backgroundColor = [UIColor whiteColor];
  [clickBtn setTitle:@"传 值" forState:UIControlStateNormal];
  [clickBtn setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
  [clickBtn setTitleColor:[UIColor redColor] forState:UIControlStateHighlighted];
  [clickBtn addTarget:self action:@selector(btnClick) forControlEvents:UIControlEventTouchUpInside];
  [self.view addSubview:clickBtn];

  // 创建文本框
  _textField = [[UITextField alloc] initWithFrame:CGRectMake(10, 150, 250, 40)];
  _textField.borderStyle = UITextBorderStyleRoundedRect;
  _textField.backgroundColor = [UIColor whiteColor];
  [self.view addSubview:_textField];
}

#pragma mark - 点击事件

- (void)btnClick {

  // 创建NSUserDefaults单例对象,它可以把数据以Plist文件形式存储于沙盒中,也可从沙盒中读取对应的Plist文件
  NSUserDefaults *passData = [NSUserDefaults standardUserDefaults];
  // 保存数据
  [passData setObject:_textField.text forKey:@"passData"];

  // 跳转界面
  [self.navigationController popViewControllerAnimated:YES];

}

@end
版权声明:本文为博主原创文章,未经博主允许不得转载。

控制器的数据传递

控制器的数据传递实现
  • ITcontend
  • ITcontend
  • 2014年12月04日 09:52
  • 716

控制器之间的数据传递——Block传值

Block传值 我们先在这里约定:界面1传值到界面2为顺传,界面2传值到界面1为逆传 一般用Block传值是为了降低视图控制器之间的耦合度,和代理传值类似主要用于逆序传值。 一. 实现步骤: ...
  • SSIrreplaceable
  • SSIrreplaceable
  • 2016年08月29日 18:36
  • 1009

控制器之间的数据传递——storyboard中控制器的数据传递

在APP开发中,我们经常需要在不同的控制器之间进行数据传递,按照传递的方向,可分为顺传和逆传;按照是否通过第三者(如通过单例、或者文件等)传递数据,可以分为:直接传递和间接传递。 一. 在st...
  • SSIrreplaceable
  • SSIrreplaceable
  • 2016年08月29日 14:51
  • 933

控制器之间的数据传递——属性传值

一、属性传值 我们先在这里约定:界面1传值到界面2为顺传,界面2传值到界面1为逆传 (一). 顺传 界面2需要有一个用于接收数据的属性 界面2在压入栈之前,把界面1中的数据直接赋值给界面2...
  • SSIrreplaceable
  • SSIrreplaceable
  • 2016年08月29日 16:52
  • 1024

ios控制器之间传值-Block传值

一、在发送者中定义代码块属性 @property (nonatomic,copy) void (^changeBgColor)(UIColor *color); 二、在发送者中进行代码块的调用...
  • Fantasy_Jun
  • Fantasy_Jun
  • 2017年04月24日 18:13
  • 193

iOS开发总结之控制器之间传值的8种方式

1.前言 项目开发当中往往会遇到控制器之间的传值,总结了一下总共有如下6种传递方式(包括顺传和逆传) 代理 、 单粒 、通知 、 kvc 、 block  和  NSUserDefaults 这6种方...
  • sunnyboy9
  • sunnyboy9
  • 2016年04月27日 22:00
  • 2352

ASP.NET MVC控制器与控制器间互相调用并且传参数

当多个action需要调用并且传递参数时:     public ActionResult getAllMenu(int i) {             ManagerMenu managerM...
  • CarryBest
  • CarryBest
  • 2017年01月13日 15:12
  • 1462

两个控制器之间8种传值的方式:

1.单例  2.通知  3.代理 4.在viewwilldisappear方法中传值 5.uiapplication是单例 通过这个取出控制器然后传值 ...
  • ft6206
  • ft6206
  • 2016年10月23日 10:15
  • 442

swift两个视图控制器之间的传值

import UIKit class ViewController: UIViewController, myDelegate { @IBOutlet weak var princ...
  • lcg910978041
  • lcg910978041
  • 2016年06月15日 22:36
  • 1320

Java类之间的数据传递3中方法。

1.若是不变的常量可用接口interface,在接口中定义然后几个类就可以共用了。 2.如果是类之间传递变量有两种方法,假如类A调用类B的一个属性,类B的长像如下: class B {   pu...
  • baidu_30204381
  • baidu_30204381
  • 2015年07月30日 10:12
  • 495
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:控制器之间的数据传递——NSUserDefaults传值
举报原因:
原因补充:

(最多只允许输入30个字)