zoukankan      html  css  js  c++  java
  • block 传值 遇到的出错点:Thread 1:EXC_BAD_ACCESS(code=1,address=0x10)

    block 传值 遇到的出错点:Thread 1:EXC_BAD_ACCESS(code=1,address=0x10)

    2015-10-12 17:02:35 浏览(89)

    [摘要:Home界里也便是须要吸收值的界里。

    #pragma mark 推出登录界里

    -(void)loginAction:(id)sender {

    LoginViewController *loginVC = [[LoginViewController all];

    }

     


    Home界面也就是需要接收值的界面。

    #pragma mark 推出登录界面

    -(void)loginAction:(id)sender

    {

        LoginViewController *loginVC = [[LoginViewController alloc]init];

     

    #warning 遇到block,先执行block块外的语句,再执行块内语句

        //block 的定义

        loginVC.block = ^(NSString *text){

            

            //                    self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc]initWithTitle:text style:UIBarButtonItemStyleDone target:nil action:nil];

            

            NSLog(@"传过来的值:%@",text);

        };

        

     

    #warning 前后创建的对象是不一样的

        //之前出错就是一到LoginViewController.m中的self.block(name)就直接断了,原因是因为我在这里的跳转之前又创建了一个新的.

        [self.navigationController pushViewController:[LoginViewController new] animated:YES];

    }


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

    传值的那个界面的.h

    #import <UIKit/UIKit.h>


    //声明一个block用来传值,注意给block取别名的默认返回值是int

    typedef void (^blockLoginTitle)(NSString *title);


    @interface LoginViewController : UIViewController



    //声明一个属性,方便使用blockLoginTitle

    @property(nonatomic,strong)blockLoginTitle block;


    @end


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

    .m

    #pragma mark 登录按钮事件的响应

    -(void)loginBtnAction:(UIButton *)sender

    {

        //获取登录界面的输入信息

        NSString *name = _loginView.nameLTView.textField.text;

        NSString *pwd = _loginView.passLTView.textField.text;

     

        

        

    #pragma mark 去数据库中取到值

        

        

        NSArray *result = [[DBManager sharedDBManager] selectAllUser];

        

        

        for (User *user in result) {

            

            if ([name isEqualToString:user.name] && [pwd isEqualToString:user.password])

            {

    #warning 这里直接出错,没有任何错误提醒,只有 Thread 1:EXC_BAD_ACCESS(code=1,address=0x10)

                //调用block

                self.block(name); 

                

                [self.navigationController popToRootViewControllerAnimated:YES];

            }

            

        }

        

    }

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


    正确的修改:

    在要接收值的界面中:

    [self.navigationController pushViewController[LoginViewController newanimated:YES];

    改为:

    [self.navigationController pushViewController:loginVC animated:YES];

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


    还需要注意的一点就是,block传值,传值语句是在推出第一个页面之前,接收值的语句是在第一个页面推出第二个页面之前。

    因为,block块之后的语句比block块内的语句先执行。

  • 相关阅读:
    洛谷 P2979 [USACO10JAN]奶酪塔Cheese Towers
    celery -2
    【express】
    ↗☻【HTML5秘籍 #BOOK#】第8章 使用CSS3
    -_-#【Dom Ready / Dom Load】
    【jQuery】
    ♫【Avalon】
    【兼容】IE下PNG色差
    ↗☻【HTML5秘籍 #BOOK#】第4章 Web表单
    洛谷—— P1328 生活大爆炸版石头剪刀布
  • 原文地址:https://www.cnblogs.com/MJP334414/p/5920156.html
Copyright © 2011-2022 走看看