0

奇怪的标题,我知道,但这是解释我的问题的最快方法。Parse 服务有一个预建的注册控制器,用于让新用户注册您可能拥有的任何服务。无法编辑它的实现,您只能在它的委托方法中处理事件。所以我不能把它放在“注册”按钮的 IBAction 中。我想要做的是,当用户触摸“注册”时,我需要调用一些 API 来检查是否存在某些东西,然后如果它已经存在,那么不要让用户签名向上。这是用于在按下按钮时处理验证的委托方法:

// Sent to the delegate to determine whether the sign up request should be submitted to the server.
- (BOOL)signUpViewController:(PFSignUpViewController *)signUpController shouldBeginSignUp:(NSDictionary *)info {

这是我要放入其中的内容:

[self processJSONDataWithURLString:[NSString stringWithFormat:@"https://www.someapi.com/api/profile.json?username=%@",username] andBlock:^(NSData *jsonData) {

    NSDictionary *attributes = [jsonData objectFromJSONData];

    // Check to see if username has data key, if so, that means it already exists
    if ([attributes objectForKey:@"Data"]) {
        return NO; // Do not continue, username already exists
    // I've also tried:
        dispatch_sync(dispatch_get_main_queue(), ^{ return NO; } );
    }
else
        return YES; //Continue with sign up
        dispatch_sync(dispatch_get_main_queue(), ^{ return YES; } );
}];

但是,当我尝试返回任何东西时,我会遇到错误。当我直接返回 YES 时,“^(NSData *jsonData)”带有黄色下划线,我得到“不兼容的块指针类型将 BOOL (^) NSData *_strong 发送到 void(^)NSData * _strong 类型的参数” .

基本上,有什么方法可以在此方法中进行 API 调用以检查某些内容,然后根据结果返回 YES 或 NO?

谢谢!

4

2 回答 2

2
于 2013-04-22T18:07:37.473 回答
1

尝试这个:

[self processJSONDataWithURLString:[NSString stringWithFormat:@"https://www.someapi.com/api/profile.json?username=%@",username] andBlock:^(NSData *jsonData) {

    NSDictionary *attributes = [jsonData objectFromJSONData];
    BOOL status=YES; 
    // Check to see if username has data key, if so, that means it already exists
    if ([attributes objectForKey:@"Data"]) {
        status=NO; // Do not continue, username already exists

    [self performSelectorOnMainThread:@selector(callDelegate:) withObject:[NSNumber numberWithBool:status] waitUntilDone:YES];
}];

-(void)callDelegate:(NSNumber*) status
 {
   BOOL returnStatus = [status boolValue];

   //now retutn returnStatus to your delegate.
 }

但这不是正确的做法,您必须更改您编写的逻辑以支持异步通信。你可以考虑我的,只要你想按照自己的方式去做。

于 2013-04-22T18:23:29.963 回答