Reputation: 32207
ClassA.h stuff
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 - where the magic happens
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];
I skimmed a number of google articles and my implementations with copy
still gave me the same issue. Any ideas?
** after answer **
@vikingosegundo shared a great link on String Specifier Formats
Upvotes: 1
Views: 422
Reputation: 52227
BOOL
is not an object. use @"%d"
instead for logging
or
void (^block)(BOOL) = ^(BOOL is_valid) {
if (is_valid) NSLog(@"YES", nil);
else NSLog(@"NO", nil);
};
yet another way with Ternary Operator:
NSLog(is_valid ? @"Yes" : @"No");
Upvotes: 4