阻止返回错误

时间:2012-10-25 10:38:16

标签: iphone objective-c ios objective-c-blocks

我正在为我的应用程序创建一个验证方法,悬停我遇到了返回值的问题;

不兼容的块指针类型发送char ...

-(BOOL)validateEmail{

    if (self.ownUser.emailUser != self.emailField) {
        [UserAPIClient validateEmail:self.emailField sucess:^(BOOL sucess, NSError *error) {
            if (sucess) {
                return YES;
            }else{
                NSLog(@"Can´t change e mail, already one is created in the database");
                return NO;
            }
        }];

    }else{
         return YES;
    }
}

有人可以帮我解决这个问题吗?

提前致谢...

修改

我完全错过了正确的解决方案,只需采用我的 UserApiClient 来返回BOOL

-(BOOL)validateEmail{

if (self.ownUser.emailUser != self.emailField) {

    return [UserAPIClient validateEmail:self.emailField];
}else{
    return YES;
}

}

编辑2 知道,我刚才意识到,我需要这个方法的结果才能做出一些改变。 如何将此方法更改为同步方法?

    [[MYApiClient sharedInstance] getPath:@"validateEmail" parameters:params
                                    success:^(AFHTTPRequestOperation *operation, id JSON) {

                                        NSLog(@"SUCESS %@", JSON);
                                    }
                                    failure:^(AFHTTPRequestOperation *operation, NSError *error) {

                                        NSLog(@"Error  %@", error);

                                    }];

2 个答案:

答案 0 :(得分:2)

如果您想在块之外使用sucess的值,则必须将其复制到__block变量:

-(BOOL)validateEmail {

    if (self.ownUser.emailUser != self.emailField) {
        __block BOOL returnValue;

        [User validateEmail:self.emailField sucess:^(BOOL sucess, NSError *error) {
            if (sucess) {
                returnValue = YES;
            }else{
                NSLog(@"Can´t change e mail, already one is created in the database");
                returnValue = NO;
            }
        }];

        return returnValue;

    } else {
         return YES;
    }
}

块本身(正如我从原型中猜测的那样)不会返回值。

请注意,仅当[User validateEmail:sucess:] 同步时才会起作用,以便在函数调用返回时定义returnValue

答案 1 :(得分:1)

您不显示方法[User validateEmail:sucess:](原文如此)的声明,但看起来该块被声明为返回BOOL以外的其他内容。