Tag: nsurlsession

第一次调用NSURLSession不返回数据

一般来说,有必要为networking实施一个class级。 这是一个类,将采取一个url,并提供数据。 所有这些都是为了不打分额外的逻辑控制器。 我遇到过这样的问题,当你第一次创build一个View时,数据不会来。 这是networking类: private static var dataTask: NSURLSessionDataTask? private static var dataJSON: NSData? private static var sessionConfig: NSURLSessionConfiguration = { var configuration = NSURLSessionConfiguration.defaultSessionConfiguration() configuration.allowsCellularAccess = false configuration.HTTPMaximumConnectionsPerHost = 2 configuration.HTTPAdditionalHeaders = ["Accept": "application/json"] configuration.timeoutIntervalForRequest = 30.0 configuration.timeoutIntervalForResource = 60.0 return configuration }() static func getListObjectsBy(url: String?) -> NSData? { let session = […]

NSURLCredentialStorage默认凭证不会自动使用

我从NSURLConnection切换到NSURLSession为我的应用程序通信,而我在它,试图从委派authentication转移到利用NSURLCredentialStorage。 我已经移动了代码,但是我得到了-URLSession:任务:在代理上调用了didReceiveChallenge,尽pipe在启动应用程序时在sharedCredentialStorage上设置了defaultCredentials。 保护空间是相同的(根据下面logging的消息设置凭证时所创build的凭证以及由NSURLAuthenticationChallenge传递的凭证): Register credentials for: <NSURLProtectionSpace: 0x162227c0>: Host:192.168.1.99, Server:https, Auth-Scheme:NSURLAuthenticationMethodDefault, Realm:192.168.1.99, Port:23650, Proxy:NO, Proxy-Type:(null) Unexpected authentication challenge: <NSURLProtectionSpace: 0x1680ee40>: Host:192.168.1.99, Server:https, Auth-Scheme:NSURLAuthenticationMethodDefault, Realm:192.168.1.99, Port:23650, Proxy:NO, Proxy-Type:(null) 并在didReceiveChallenge:(NSURLAuthenticationChallenge *)挑战委托方法: po [[NSURLCredentialStorage sharedCredentialStorage] defaultCredentialForProtectionSpace:[challenge protectionSpace]] 结果是 <NSURLCredential: 0x1680ff00>: thecorrectusername https://stackoverflow.com/a/501869/563905表明,当服务器响应一个401的挑战,NSURLConnection(这是一个NSURLSession的问题?)首先检查授权的标题(没有任何设置)和然后咨询NSURLCredentialStorage获取保护空间的凭证。 我只是不明白为什么我会得到被调用的didReceiveChallenge委托? 当我没有设置委托方法NSURLSession只需重新发送请求没有任何凭据…我很难过… 编辑:我已经添加了手动凭证处理didReceiveChallenge:方法,并且它正在触发每个请求,尽pipe只使用一个NSURLSession。

从自定义类pipe理NSURLSession的完成处理程序

我的应用程序的一部分处理基于提供给他们的唯一代码为用户创build一个login检查。 为了使我的应用程序结构合理,我创build了一个networking助手类来处理所有的networking操作。 这里是我如何从控制器类(ViewController.m)调用我的助手类。 [[LoginNetworkHelper alloc] loginBasedOnPatientId:@"abc"]; 我的LoginNetworkHelper类执行以下任务(LoginNetworkhelper.m) – (BOOL)loginBasedOnPatientId:(NSString *)patientId { NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"http://test.php"]]; [request setHTTPMethod:@"POST"]; //creating json string to send to server NSDictionary *patientData = [NSDictionary dictionaryWithObjectsAndKeys:@"002688727",@"value",@"prem_key_id",@"name", nil]; NSMutableArray *dataArr = [[NSMutableArray alloc] init]; [dataArr addObject:patientData]; NSError *error; NSData *jsonData2 = [NSJSONSerialization dataWithJSONObject:dataArr options:NSJSONWritingPrettyPrinted error:&error]; NSString *jsonString = [[NSString alloc] initWithData:jsonData2 […]

如何知道NSURLSessionDataTask响应是否来自caching?

我想确定来自NSURLSessionDataTask的响应是来自caching还是来自服务器 我NSURLSessionDataTask创build我的NSURLSessionDataTask request.cachePolicy = NSURLRequestUseProtocolCachePolicy;

后台传输下载任务失败时closures应用程序

我已经创build了后台nsurlsession来执行下载任务。 当应用程序在后台时,它运行良好。 然而,当我closures应用程序时,下载任务似乎被取消并失败(双击“Home”button并向上滑动),当我重新启动应用程序时,它使我从头开始重新下载。 根据苹果公司的文件,即使应用程序不再运行,后台传输也可以工作。 我做错了什么?

NSURLSessionDownloadTask在后台自动恢复所有任务

我有要求以连续的顺序下载文件。 目前我能够做到这一点,而应用程序在前台。 以下是我用过的逻辑。 创build下载的所有任务。 一次恢复一个,并且当前完成从URLSession:task:didCompleteWithError:恢复下一个URLSession:task:didCompleteWithError: 这个逻辑工作,而应用程序在前台,但一旦应用程序开始在后台运行(通过崩溃),我们再次运行应用程序,在下载完成所有任务状态已更改为恢复,并同时都在下载。 这是预期的行为或任何我缺less的顺序在后台模式下呢? 编辑:我通过创build下载任务逐一检查。 在完成第一个任务之后创build下一个setTaskDidCompleteBlock等等。 它只完成第一个任务,然后在setTaskDidCompleteBlock内部创build任务时setTaskDidCompleteBlock (这只发生在后台运行时,前台工作正常)。 这里是我的崩溃日志屏幕截图: 和 任何帮助,将不胜感激。

多个NSHTTPCookieStorage在同一个应用程序

我正在写一个使用NSURLSession的多用户应用程序,我不知道如何处理多个NSURLSession实例时如何有一个单独的cookie存储。 我试着用一个NSHTTPCookieStorage来设置NSURLSessionConfiguration的HTTPCookieStorage属性,我自己NSHTTPCookieStorage /初始化了它,但是它不起作用(即使我调用setCookie:我也不存储cookies) 我也尝试使用[NSURLSessionConfiguration ephemeralSessionConfiguration]但是,然后再次,我的cookie不存储在请求之间。 Set-Cookie标题出现在服务器的响应中,使用[NSHTTPCookieStorage sharedHTTPCookieStorage]工作,所以问题出在代码中。 是否可以为不同的NSURLSession实例分别存储Cookie? 我相信这是新的networkingAPI的主要观点之一。

NSURLSessionUploadTask获取响应数据

我在使用NSURLSession框架方面有一些误解,这就是为什么我决定从头开始编写小型应用程序,没有AFFramework / Alamofire。 我有一个API,需要以下步骤来上传文件: POST文件数据 获取响应(JSON) 张贴一些JSON领域的api/save 我有这样的configuration后台会话: let configuration = NSURLSessionConfiguration.backgroundSessionConfigurationWithIdentifier("myBackground") let session = NSURLSession(configuration: configuration, delegate: self, delegateQueue: nil) 我已经实现了2个方法: func URLSession(session: NSURLSession, dataTask: NSURLSessionDataTask, didReceiveData data: NSData) 在那里我汇总所有的数据 和 func URLSession(session: NSURLSession, task: NSURLSessionTask, didCompleteWithError error: NSError?) 我将这些数据转换为响应对象。 这个响应对象对我来说非常重要。 一切工作正常,而应用程序在前台,但我有背景问题。 情况1 我开始上传数据后,应用程序崩溃了。 根据WWDC我需要执行 func application(application: UIApplication, handleEventsForBackgroundURLSession identifier: String, completionHandler: () -> […]

“initWithRequest:delegate:”已被弃用:在iOS 9.0中首先弃用 – 使用NSURLSession(请参阅NSURLSession.h)

我是新的目标C和使用iOS 9的Xcode 7.2,并得到这个警告“'initWithRequest:委托:'已弃用:首先在iOS9.0弃用 – 使用NSURLSession(请参阅NSURLSession.h)”如何解决它。 我的代码如下。 +(id)createGetConnectionWithName:(NSString*)strConnectionName_ withUrl:(NSString *)pageUrl parameterNames:(NSArray *)arrParamNames parameterValues:(NSArray *)arrParamValues delegate:(id)delegate { NSURL *url=[NSURL URLWithString:[NSString stringWithFormat:@"%@",pageUrl]]; NSMutableString *post =[NSMutableString string]; for(int i=0;i<[arrParamNames count];i++) { if(i==[arrParamNames count]-1) { [post appendFormat:@"%@=%@",[arrParamNames objectAtIndex:i], [arrParamValues objectAtIndex:i]]; } else { [post appendFormat:@"%@=%@&",[arrParamNames objectAtIndex:i], [arrParamValues objectAtIndex:i]]; } } // if(![strConnectionName_ isEqualToString:APP_AUTH_CODE_NAME]) // [post appendFormat:@"&Key=%@",[self getAuthCode]]; NSData *postData = […]

链接背景NSURLSession上传

有没有人成功链接NSURLSession后台上传? 我正尝试使用NSURLSession的后台上传以5 MB的部分上传一个巨大的video文件。 上传必须按顺序进行。 整个事情在前台工作正常。 我正在使用AFNetwoking这个,它的一个多部分上传。 但是,当应用程序在后台,第一项上传罚款,并在后台启动第二个(在AFURLSessionManager setDidFinishEventsForBackgroundURLSessionBlock)。 但是它突然停止(我最好的猜测是在30秒内,因为在后台唤醒的应用程序的最大寿命为30秒),然后什么也没有发生。 我预计第二届会议将在后台完成,并呼吁第三等 – 连锁行为,但这似乎并没有工作。 我已经试着用一个HTTPMaximumConnectionsPerHost = 1一次性添加所有的文件部分到一个NSURLSession – 这工作正常,并上传完整的文件的部分。 但文件部分是随机select的,即第1部分上传,然后第5部分,第3部分,第10部分等。 我试图在NSOperationQueue中添加这个操作之间的依赖关系,这似乎弄乱了整个事情 – 上传根本不起作用。 我知道video文件可以在后台作为一个单独的file upload,但服务器期望在5 MB的部分。 因此,我想我唯一的select是链上传,或者将所有的部分添加到NSURLSession,但要确保它们总是按照它们添加的顺序上传。 任何帮助,将不胜感激。 我的代码: – (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. NSURLSessionConfiguration *config = [NSURLSessionConfiguration backgroundSessionConfigurationWithIdentifier:[NSString stringWithFormat:@"%d", rand()]]; AFURLSessionManager *manager = […]