[英]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.