EXC_BAD_ACCESS в блоке "обратный вызов" - PullRequest
1 голос
/ 30 октября 2011

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];

Я просмотрел несколько статей Google и мои реализации с copy до сих пордал мне ту же проблему.Есть идеи?

** после ответа **

@ vikingosegundo поделился отличной ссылкой на Форматы спецификатора строки

1 Ответ

4 голосов
/ 30 октября 2011

BOOL не является объектом. используйте @"%d" вместо этого для регистрации

или

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

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

};

еще один способ с Ternary Operator :

NSLog(is_valid ? @"Yes" : @"No");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...