我如何修改此代码

how I can Modify this code

我正在使用此函数向服务器发送请求并在 NSDictionary 中接收 JSON 响应。

- (void)performRequest:(NSString *)aRequest
{
    NSString *string=[NSString stringWithFormat:@"%@%@",baseURL,aRequest];
    NSURL *url = [NSURL URLWithString: string];
    NSLog(@"string%@",string);
    NSURLRequest *request = [NSURLRequest requestWithURL:url];
    [NSURLConnection sendAsynchronousRequest:request
                                       queue:[NSOperationQueue mainQueue]
                           completionHandler:^(NSURLResponse *response,
                                               NSData *data, NSError *connectionError)
     {
         if (data.length > 0 && connectionError == nil)
         {
             NSDictionary * greeting = [NSJSONSerialization JSONObjectWithData:data
                                                                      options:0
                                                                        error:NULL];
             NSLog(@"%@",greeting2);
         }
     }];
}

我想要修改它,使其仍然是一个函数发送服务 URL 和一个单独的服务,其中 JSON 响应来自 NSDictionary,因此您可以在其他 类.

我用的是iOS7介绍的网络:NSURLSession。这是我在项目中使用的网络代码。但我建议您改为使用 AFNetworking。这将为您节省更多时间。这取决于您在应用程序中想要什么。

+ (void)requestOperationWithMethod:(NSString *)method
                       withUrl:(NSString *)url
                        header:(NSDictionary *)header
                        params:(NSDictionary *)params
                    completion:(FHCompletionResultBlock)completion {
FHNetworking *network = [FHNetworking shareNetworking];
NSData *bodyData;
NSError *jsonError = nil;
NSData *data = [NSJSONSerialization dataWithJSONObject:params options:kNilOptions error:&jsonError];
if (!jsonError) {
    bodyData = data;
}

// prepare http request header and body data fields
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:url]];
for (NSString *key in header.allKeys) {
    [request setValue:header[key] forHTTPHeaderField:key];
}
[request setHTTPMethod:method];
[request setHTTPBody:bodyData];
[request setTimeoutInterval:30.0f];

[[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES];
[[network.session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error){
    NSError *jsonError = nil;
    NSDictionary *json = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&jsonError];

    if (jsonError)
        completion(nil, jsonError);
    else {
        NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)response;
        if (httpResponse.statusCode >= 400) {

            if (json[@"code"] && json[@"error"]) {
                NSError *error = [NSError errorWithDomain:@"Error" code:[json[@"code"] integerValue] userInfo:@{NSLocalizedDescriptionKey: NSLocalizedString(json[@"error"], nil)}];
                completion(nil, error);
            }
            else {
                NSError *error = [NSError errorWithDomain:@"Error" code:-1 userInfo:@{NSLocalizedDescriptionKey: NSLocalizedString(@"Unknown error", nil)}];
                completion(nil, error);
            }
        }
        else {
            completion(json, nil);
        }
    }
    [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:NO];
}] resume];

}

您可以更改您的方法以获取 completionHandler 参数本身:

- (void)performRequest:(NSString *)aRequest completionHandler:(void(^)(NSDictionary *responseObject, NSError *error))completionHandler
{
    NSString *string=[NSString stringWithFormat:@"%@%@",baseURL,aRequest];
    NSURL *url = [NSURL URLWithString: string];
    NSURLRequest *request = [NSURLRequest requestWithURL:url];
    [NSURLConnection sendAsynchronousRequest:request
                                       queue:[NSOperationQueue mainQueue]
                           completionHandler:^(NSURLResponse *response,
                                               NSData *data, NSError *connectionError) {
        if (data.length > 0 && connectionError == nil) { 
            NSError *parseError;
            NSDictionary *responseObject = [NSJSONSerialization JSONObjectWithData:data
                                                                           options:0
                                                                             error:&parseError];
            completionHandler(responseObject, parseError);
        } else {
            completionHandler(nil, error);
        }
    }];
}

现在您可以调用它并在完成处理程序中提供您想要的任何内容:

[self performRequest:requestString completionHandler:^(NSDictionary *responseObject, NSError *error) {
    if (responseObject) {
        // everything is good; use your NSDictionary here
    } else {
        // handle error here
    }
}];