2012-10-25 156 views
1

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

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

-(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; 
    } 
} 

任何人可以帮助我解决这个问题?

在此先感谢...

编辑

我completily错过了合适的解决方案,只是通过我的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); 

            }]; 
+0

您需要发布声明'[User validateEmail:sucess:]'并告诉我们它的语义以便正确回答这个问题。 – trojanfoe

回答

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

或者更好的还有'[User validateEmail:sucess:]'返回从块中返回的任何内容...... – trojanfoe

+0

@trojanfoe:在我看来,块更像是验证的完成块,并且不返回任何东西。但这是纯粹的猜测,我可能是错的。 –

+0

我同意;然而,如果它返回了'BOOL',那么'[User validateEmail:sucess:]'可以简单地传递回来,使它更易于使用(很容易忘记'__block'说明符)。 – trojanfoe

1

你没有表现方法[User validateEmail:sucess:](原文如此)的声明,但它看起来像块被声明为返回比BOOL以外的东西。