Your solution is to make one request at the time. That means, start a new request only when you get a result from the last one.
Something like this:
-(void) makeNextRequest {
__typeof__ (self) __weak weakSelf = self;
[[APIClient sharedClient] POST:@"/api/my_object.json" parameters:@{@"obj":[dataArray lastObject]} success:^(NSURLSessionDataTask *task, id responseObject) {
[dataArray removeLastObject];
[weakSelf makeNextRequest];
} failure:^(NSURLSessionDataTask *task, NSError *error) {
}];
}