Objective-C块中的NSString返回types遇到问题

谢谢你的帮助。 我的问题是下一个。 我需要使用AFNetworking,当请求请求到服务器时,服务器是响应。 这个结果我需要返回我的方法。 方法AFNetworking使用块成功或失败。 我想在返回服务器string(操作)成功或失败的选项块。

- (NSString *)executeMultipart:(NSURL *)url { __block NSString *strJSON; [_operationManager POST:[url absoluteString]parameters:_params constructingBodyWithBlock:^(id<AFMultipartFormData> formData){ [formData appendPartWithFormData:[_params objectForKey:TAG_PHOTO] name:TAG_PHOTO]; } success:^(AFHTTPRequestOperation *operation, id responseObject) { strJSON = [operation.responseString stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; return strJSON; } failure:^(AFHTTPRequestOperation *operation, NSError *error) { strJSON = [operation.responseString stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; return strJSON; }]; } 

但是显示错误:

(')(AFHTTPRequestOperation * _strong,__ strong id)'的参数发送'NSString *(^)(AFHTTPRequestOperation * __ strong,_ strong id)'不兼容的块指针types'

我很抱歉,如果我的问题是愚蠢的,因为我开始与iOS开发。 请帮帮我!!! 谢谢。

实际上这是async block ,你和方法将在块完全执行之前返回。 你不应该返回这个string你应该调用一些完成处理程序或委托方法。 更好的方法是将完成处理程序传递给方法,并在返回string的地方调用完成处理程序。

你的方法应该是这样的。

 - (void)executeMultipart:(NSURL *)url withCompletionHandler:(void (^)(NSString*))handler { __block NSString *strJSON; [_operationManager POST:[url absoluteString]parameters:_params constructingBodyWithBlock:^(id<AFMultipartFormData> formData){ [formData appendPartWithFormData:[_params objectForKey:TAG_PHOTO] name:TAG_PHOTO]; } success:^(AFHTTPRequestOperation *operation, id responseObject) { strJSON = [operation.responseString stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; handler(strJSON); } failure:^(AFHTTPRequestOperation *operation, NSError *error) { strJSON = [operation.responseString stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; handler(strJSON); }]; } 

从你使用这个方法的类你应该调用这个方法

 [obj executeMultipart:url withCompletionHandler:^(NSString* returnString)handler{ // code here // do whatever you want to with return string }]; 

POST:parameters:constructingBodyWithBlock:方法需要一个不返回任何内容的块。

这听起来像你试图返回一个asynchronous方法的结果。 这通常不实际。 asynchronous方法的全部要点是不会与其他事情一致。 你需要让这个方法自己callback一下。