Ios NSURLSession HTTP基本身份验证委托不工作

Ios NSURLSession HTTP基本身份验证委托不工作,ios,nsurlsession,Ios,Nsurlsession,我对质询代表使用了NSURLConnection,效果很好。 现在,我将代码迁移到会话,并没有调用质询。 在服务器端,我看到401响应,但没有调用委托 @interface MyDelegate : NSObject<NSURLSessionDelegate, NSURLSessionTaskDelegate> @end @implementation MyDelegate - (void)URLSession:(NSURLSession *)session didReceive

我对质询代表使用了
NSURLConnection
,效果很好。 现在,我将代码迁移到会话,并没有调用质询。 在服务器端,我看到401响应,但没有调用委托

@interface MyDelegate : NSObject<NSURLSessionDelegate, NSURLSessionTaskDelegate>

@end

@implementation MyDelegate
- (void)URLSession:(NSURLSession *)session didReceiveChallenge:(NSURLAuthenticationChallenge *)challenge
 completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition disposition, NSURLCredential * __nullable credential))completionHandler {
// Break point here NOT called
}

- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task
didReceiveChallenge:(NSURLAuthenticationChallenge *)challenge
 completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition disposition, NSURLCredential * __nullable credential))completionHandler {
    // Break point here NOT called

}
@end

int main(int argc, char * argv[]) {
    @autoreleasepool {
        //return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
        NSURL *url = [NSURL URLWithString:@"http://127.0.0.1:8000/upload/123"];
        NSMutableURLRequest *req = [NSMutableURLRequest requestWithURL:url];
        req.HTTPMethod = @"PUT";
        [req setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
        NSError *err;
        NSURLResponse *resp;
        NSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration] delegate:[MyDelegate new] delegateQueue:nil];
        [[session uploadTaskWithRequest:req fromData:[NSData new]]resume];
        sleep(10000);
    }
}
@接口MyDelegate:NSObject
@结束
@实现MyDelegate
-(void)URLSession:(NSURLSession*)session didReceiveChallenge:(NSURLAuthenticationChallenge*)challenge
completionHandler:(void(^)(NSURLSessionAuthChallengeDisposition处置,NSURLCredential*\uuu nullable credential))completionHandler{
//这里不叫断点
}
-(void)URLSession:(NSURLSession*)会话任务:(NSURLSessionTask*)任务
didReceiveChallenge:(NSURLAuthenticationChallenge*)挑战
completionHandler:(void(^)(NSURLSessionAuthChallengeDisposition处置,NSURLCredential*\uuu nullable credential))completionHandler{
//这里不叫断点
}
@结束
int main(int argc,char*argv[]){
@自动释放池{
//返回UIApplicationMain(argc、argv、nil、NSStringFromClass([AppDelegate类]);
NSURL*url=[NSURL URLWithString:@”http://127.0.0.1:8000/upload/123"];
NSMutableURLRequest*req=[NSMutableUrlRequestWithURL:url];
req.HTTPMethod=@“PUT”;
[req setValue:@“应用程序/json”用于HttpHeaderField:@“内容类型”];
n错误*错误;
NSURLResponse*resp;
NSURLSession*会话=[NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]委托:[MyDelegate new]委托队列:nil];
[[session uploadTaskWithRequest:req fromData:[NSData new]]resume];
睡眠(10000);
}
}
我错过什么了吗

以防万一:请不要建议我手动创建基本HTTP auth头,我想使用委托

PS:由于代理未保留在会话中,可能是我的代理被释放了吗?
然后,我将尝试将其设置为静态。

我认为NSURLSession请求必须在运行循环中运行。然而,我对此并不确定


当然,如果你是在一个真正的应用程序中这样做的,你可能不想用睡眠呼叫来阻止主线程。这可能也是问题的一部分。

NSURLSession对象与NSURLConnection对象一样保留其委托。所以不,这不是问题所在。嗨,也许你已经设法解决了NSURLSession代表的这个问题。。。如果是这样的话,如果你能在这里发布解决方案,那将非常有帮助。谢谢