• ViewController调用顺序问题,解决ViewController之间传递数据失败的问题


    先看下面的代码:

    - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
    {
        DetailViewController *detailViewController = [[DetailViewController alloc] init];
        detailViewController.nameLabel.text = @"选中的数据";
      
        [self.navigationController pushViewController:detailViewController animated:YES];
    }

    现象:nameLabel 没有能够获取到正确的数据,为什么呢? 

    =================================================

    此时,Controller还没有对View进行装载,导致nameLabel组件其实依然是nil,尽管没有提示错误,却不成功

    可以改成下面的代码:

    - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
    {
        DetailViewController *detailViewController = [[DetailViewController alloc] init];
     
        [self.navigationController pushViewController:detailViewController animated:YES];
     
        detailViewController.nameLabel.text = @"选中的数据";

    }

    这样就可以正常运行了。

     =================================================

    但是从程序语言规范的程度上考虑,不建议直接访问UIViewController内部的组件

    在.h文件中声明一个新的NSString对象:

    @property (strong, nonatomic) NSString *name;

    然后,上面的代码改成:

    - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
    {
        DetailViewController *detailViewController = [[DetailViewController alloc] init];
        detailViewController.name = @"选中的数据"; 
        [self.navigationController pushViewController:detailViewController animated:YES];
    }

    然后,在viewDidLoad方法中

    - (void)viewDidLoad
    {
        [super viewDidLoad];
        // Do any additional setup after loading the view from its nib.
        self.nameLabel.text = _name;
    }

    这样,程序的结构更清晰,更有利于代码重构

    下载程序代码

  • 相关阅读:
    解决前端跨域请求的几种方式
    使用excel 展现数据库内容
    win7 安装windows 服务 报错 System.Security.SecurityException 解决方法 An exception occurred during the Install phase. System.Security.SecurityException: The so
    java 查看线程死锁
    linux 配置 java 环境变量
    数据库性能优化
    C#中静态与非静态方法比较
    apache日志切割工具cronolog安装配置
    虚拟机克隆后网卡有问题解决方法
    vs2015工具箱突然没有了
  • 原文地址:https://www.cnblogs.com/iihe602/p/2739136.html
Copyright © 2020-2023  润新知