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塊內的語句先執行。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM