Instance Method


Periodically informs the delegate of the progress of sending body content to the server.


- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didSendBodyData:(int64_t)bytesSent totalBytesSent:(int64_t)totalBytesSent totalBytesExpectedToSend:(int64_t)totalBytesExpectedToSend;



The session containing the data task.


The data task.


The number of bytes sent since the last time this delegate method was called.


The total number of bytes sent so far.


The expected length of the body data. The URL loading system can determine the length of the upload data in three ways:

  • From the length of the NSData object provided as the upload body.

  • From the length of the file on disk provided as the upload body of an upload task (not a download task).

  • From the Content-Length in the request object, if you explicitly set it.

Otherwise, the value is NSURLSessionTransferSizeUnknown (-1) if you provided a stream or body data object, or zero (0) if you did not.


The totalBytesSent and totalBytesExpectedToSend parameters are also available as NSURLSessionTask properties countOfBytesSent and countOfBytesExpectedToSend. Or, since NSURLSessionTask supports NSProgressReporting, you can use the task’s progress property instead, which may be more convenient.

See Also

Working with Upload Tasks

- URLSession:task:needNewBodyStream:

Tells the delegate when a task requires a new request body stream to send to the remote server.