0

我目前正在努力为什么以下代码没有记录我使用的 NSString。

-(BOOL)login:(NSString *)email withPassword:(NSString *)password error:(NSError *__autoreleasing *)error
{

__block BOOL success = NO;

if (*error)
    return success;

__block NSString *domain = @"de.FranzBusch.Searchlight.ErrorDomain";
__block NSError *localerror = nil;

//HTTP Request
NSURL *url = [NSURL URLWithString:@"Wrong URL to test the failure block"];
AFHTTPClient *client = [[AFHTTPClient alloc] initWithBaseURL:url];

NSDictionary *params = [NSDictionary dictionaryWithObjectsAndKeys:
                        email, @"email",
                        password, @"password", nil];

NSMutableURLRequest *request = [client requestWithMethod:@"POST" path:@"" parameters:params];
AFKissXMLRequestOperation *operation = [AFKissXMLRequestOperation XMLDocumentRequestOperationWithRequest:request
success:^(NSURLRequest *request, NSHTTPURLResponse *response, DDXMLDocument *XMLDocument)
{
}failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *HTTPError, DDXMLDocument *XMLDocument)
{
    localerror = [NSError errorWithDomain:domain code:-101 userInfo:[self generateErrorDictionary:@"HTTPError"]];
    success = NO;
}];
[operation start];

NSLog(@"test %@", [localerror domain]);
return success;
}

如果我尝试在故障块中记录域,我会得到正确的。但是在范围之外,块变量没有被修改。Ans 对我理解错误的提示表示赞赏。

4

2 回答 2

2

问题是successandfailure块在您的 `login:withPassword:error: 方法完成并返回后很长时间被调用,因为操作是在后台完成的。

当你的 NSLog 语句到达时,操作还没有完成,两个块都还没有执行。所以localerror仍然是nilsuccess仍然是否。

于 2012-11-07T21:45:00.983 回答
0

块外调用的 NSLog 域将被更早地调用,因为它将在主线程上,并且 NSLog in failure block 在新线程中触发,并且在服务器响应之后。所以返回成功也返回未设置成功(在你的情况下为否)。

于 2012-11-07T21:46:04.677 回答