OC-debug调试&界面切换&多界面正反向传值

1.debug调试

什么是debug调试
程序报错崩掉或程序不报错,但与期待的效果不符时,如何找出错误的位置
解决理念
找出可能出错的位置,让程序停下来,然后仔细观察在这一时刻,内存中的各个变量中的值是否与期待的相一样,如果发生了不一样的值,那么在进一步缩小范围,查看这个变量为什么不是期待的值

如何初步判断这个出错的位置?
猜!依据数据的变化过程,根据界面上的结果,结合着判断出一个可能出错的位置

如何断点(找个位置让程序停下来)
在代码的左边比较窄的一列中,在希望程序停下的位置,点击鼠标左键,会出现一个蓝色的箭头

2.多VC之间的切换 (多个界面之间的切换)

方式一
两个普通的控制器之间的推出和返回
推出时:使用控制器的 presentViewController 方法, 指定要推出的是谁

[self presentViewController:[[InfoViewController alloc]init] animated:YES completion:nil]

返回时:使用控制器的 dismissViewController 方法, 不用指定返回到哪,系统记录着,所以从哪里来的就会返回到哪里去

[self dismissViewControllerAnimated:YES completion:nil];

这里写图片描述

3.多VC之间的传值 (赋值)

核心点:拿到对方的引用,并且对方要公开能够存储数据的属性
正向传值:
-从A跳转B,并传值到B
–step1:为B公开一个属性,用于接收要传入的值
–step2:在A中创建B的实例,给B公开的接收值的属性赋值
–step3:在B中,选择适当的时机,显示传入进来的值

//该属性 接收 回传的内容
@property(nonatomic,strong)NSString *backEditContent;
//创建BVC
BViewController *bvc = [[BViewController alloc]init];
//给BVC传入 参数1 和 参数2
bvc.editTitle = editTitle;
bvc.editContent = content;
//把自己 赋值给B中的avc属性,在B中就可以通过avc属性,找到当前对象
bvc.avc = self;
//跳转到BVC
[self presentViewController:bvc animated:YES completion:nil];
-(void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    NSLog(@"回传的内容是:%@",self.backEditContent);
    self.tempLabel.text = self.backEditContent;
}

反向传值:
-从B返回到A,并反向传值给A
–step1.为A公开一个可以存储反向传回的数据的属性
–step2.为B公开一个可以存储A引用的属性
–step3.在A类中,被B中A引用的属性赋值为自己
–step4:适当的时候,通过B中A的属性找到前面的界面,并把值回传给A中接收回传值的属性
–step5:在适当的时候A把传回的数据,显示在界面上

//接收 前面界面传过来的内容
@property(nonatomic,strong)NSString *editTitle;
@property(nonatomic,strong)NSString *editContent;
//声明 前面界面实例的属性
@property(nonatomic,strong)AViewController *avc;
//把修改完的内容 传给 前面界面
    self.avc.backEditContent = self.editContentField.text;
    //返回前面界面
    [self dismissViewControllerAnimated:YES completion:nil];

委托的反向传值

委托方需要做的3件事
1.制定规则 <协议>
2.声明一个代理人属性 id<协议> delegate;
3.适当的时机,通知代理人执行代理方法
委托方:

//1.指定规则 (通过委托的协议名字为,委托方的类名+Delegate)
@protocol BViewControllerDelegate <NSObject>
-(void)editFinish:(NSString*)content;
@end

@interface BViewController : UIViewController
//接收 前面界面传过来的内容
@property(nonatomic,strong)NSString *editTitle;
@property(nonatomic,strong)NSString *editContent;
//2.声明代理人属性
@property(nonatomic,weak)id<BViewControllerDelegate> delegate;
@end
//3.适当的时机,通知代理人执行代理方法,通过参数把数据传给代理人
    [self.delegate editFinish:self.editContentField.text];

代理方需要做的3件事
1.遵守协议
2.实现代理方法 (协议中方法)
3.通知委托方你的代理人为我
代理方:

//代理方 1.遵守协议
@interface AViewController () <BViewControllerDelegate>
//代理方 2.实现协议中的代理方法
-(void)editFinish:(NSString *)content {
    self.tempLabel.text = content;
}
//设置BVC的代理人为当前对象
    bvc.delegate = self;

思考练习

登陆失败使用弹窗警告
这里写图片描述
这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值