iOS9 sendSynchronousRequest deprecated

后端 未结 7 1426
自闭症患者
自闭症患者 2020-12-24 13:15

Warning:\'sendSynchronousRequest(_:returningResponse:)\' was deprecated in iOS 9.0: Use [NSURLSession dataTaskWithRequest:completionHandler:] (see NSURLSe

7条回答
  •  情深已故
    2020-12-24 13:52

    Here is a complete version of mine with dispatch_semaphore_t and return response and error without block assign warning . Thank @Nick H247 and @Mike Keskinov.

    - (NSData*)sendSynchronousRequest:NSURLRequest *urlRequest
                    returningResponse:(NSURLResponse **)outResponse
                                error:(NSError **)outError
    {
    
        NSError __block *err = NULL;
        NSData __block *data;
        BOOL __block reqProcessed = false;
        NSURLResponse __block *resp;
    
    //    data = [NSURLConnection sendSynchronousRequest:urlRequest returningResponse:response error:error];
    
        dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);
        NSURLSession *session = _session;
        [[session dataTaskWithRequest:urlRequest
                completionHandler:^(NSData *_data,
                                    NSURLResponse *_response,
                                    NSError *_error) {
                    // handle response
                    data = _data;
                    resp = _response;
                    err = _error;
    
                    reqProcessed = true;
    
                    dispatch_semaphore_signal(semaphore);
    
                }] resume];
    
        dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);
    
        if (reqProcessed) {
            if(outResponse != NULL) {
                *outResponse = resp;
            }
    
            if (outError != NULL) {
                *outError = err;
            }
    
        }
    
        return data;
    }
    

提交回复
热议问题