簡體   English   中英

塊“回調”上的EXC_BAD_ACCESS

[英]EXC_BAD_ACCESS on a Block “callback”

ClassA.h的東西

typedef void (^ ValidatorBlock)(BOOL);
...
@interface ClassA : NSObject {
    ValidatorBlock validatorBlock;
}
...
- (void)setValidatorBlock:(ValidatorBlock)block;
...
@property (nonatomic, retain) ValidatorBlock validatorBlock;

ClassA-> setValidatorBlock

- (void)setValidatorBlock:(ValidatorBlock)block {
    validatorBlock = [block copy];
}

ClassA-> validateForm

- (void)validateForm {
    validatorBlock(NO);
}

ClassA-> textFieldDidEndEditing

- (void)textFieldDidEndEditing:(UITextField *)textField {
    [self validateForm];
}

ClassB-> viewDidLoad - 魔術發生的地方

void (^block)(BOOL) = ^(BOOL is_valid) {
    // works fine when passed NO, always crashes when passed YES with EXC_BAD_ACCESS
    NSLog(@"block: %@", is_valid);
};

ClassA *classA = [[ClassA alloc] init];
[classA setValidatorBlock:block];

我瀏覽了一些谷歌文章 ,我的copy實現仍然給了我同樣的問題。 有任何想法嗎?

** 回答后 **

@vikingosegundo在String Specifier格式上分享了一個很棒的鏈接

BOOL不是一個對象。 使用@"%d"代替記錄

要么

void (^block)(BOOL) = ^(BOOL is_valid) {

    if (is_valid) NSLog(@"YES", nil);
    else NSLog(@"NO", nil);

};

三元運算符的另一種方式:

NSLog(is_valid ? @"Yes" : @"No");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM