标签: nsurlsession

制作NSURLSessionTasks队列的最佳实践

制作串行队列的最佳做法是NSURLSessionTasks什么?

就我而言,我需要:

  1. 获取JSON文件中的URL(NSURLSessionDataTask)
  2. 在该URL下载文件(NSURLSessionDownloadTask)

这是我到目前为止所拥有的:

session = [NSURLSession sharedSession];

//Download the JSON:
NSURLRequest *dataRequest = [NSURLRequest requestWithURL:url];

NSURLSessionDataTask *task =
[session dataTaskWithRequest:dataRequest
           completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {

               //Figure out the URL of the file I want to download:
               NSJSONSerialization *json = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil];
               NSURL *downloadURL = [NSURL urlWithString:[json objectForKey:@"download_url"]];

               NSURLSessionDownloadTask *fileDownloadTask =
               [session downloadTaskWithRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:playlistURL]]
                              completionHandler:^(NSURL *location, NSURLResponse *response, NSError *error) {
                                  NSLog(@"completed!");
                              }];

               [fileDownloadTask resume];

           }
 ];
Run Code Online (Sandbox Code Playgroud)

除了在另一个完成中写一个完成块看起来很乱的事实,我打电话时得到一个EXC_BAD_ACCESS错误 …

cocoa-touch ios nsurlsession

22
推荐指数
3
解决办法
2万
查看次数

在IOS中使用Web服务时会发生NSURLSession内存泄漏

我建立一个使用Web服务,以获得从Web服务我使用信息的应用NSURLSessionNSURLSessionDataTask.

我现在处于内存测试阶段,我发现它NSURLSession导致内存泄漏.

这不是所有泄漏. 这是我能够适应的画面.

这不是所有泄漏.这就是我能够融入画面的一切.

以下是我如何设置NSURLSession并从Web服务请求信息.

#pragma mark - Getter Methods

- (NSURLSessionConfiguration *)sessionConfiguration
{
    if (_sessionConfiguration == nil)
    {
        _sessionConfiguration = [NSURLSessionConfiguration ephemeralSessionConfiguration];

        [_sessionConfiguration setHTTPAdditionalHeaders:@{@"Accept": @"application/json"}];

        _sessionConfiguration.timeoutIntervalForRequest = 60.0;
        _sessionConfiguration.timeoutIntervalForResource = 120.0;
        _sessionConfiguration.HTTPMaximumConnectionsPerHost = 1;
    }

    return _sessionConfiguration;
}

- (NSURLSession *)session
{
    if (_session == nil)
    {
        _session = [NSURLSession
                    sessionWithConfiguration:self.sessionConfiguration
                    delegate:self
                    delegateQueue:[NSOperationQueue mainQueue]];
    }

    return _session;
}

#pragma mark -


#pragma mark - Data Task

- (void)photoDataTaskWithRequest:(NSURLRequest *)theRequest
{

#ifdef DEBUG …
Run Code Online (Sandbox Code Playgroud)

memory-leaks ios nsurlsession

21
推荐指数
2
解决办法
1万
查看次数

NSURLSession委托与completionHandler

我一直使用完成处理程序.随着NSURLConnection和现在NSURLSession.这导致我的代码非常不整洁,特别是我在请求中的请求内请求.

我想尝试使用代理NSURLSession来实现我不熟悉的事情NSURLConnection.

所以我创建了一个NSURLSession,并创建了一个dataTask:

NSURLSessionDataTask *dataTask = [overallSession dataTaskWithURL:url
                                                  completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
                                                      if(error == nil)
                                                      {
                                                          NSString * text = [[NSString alloc] initWithData: data encoding: NSUTF8StringEncoding];
                                                          NSLog(@"Data = %@",text);
                                                      }

                                                  }];

    [dataTask resume];
Run Code Online (Sandbox Code Playgroud)

现在我有一个completionHandler响应,我将如何切换到委托来管理响应和数据?我可以dataTask从这个代表中添加另一个吗?使用这个dataTask创建并放入会话的cookie ?

delegates objective-c nsurlconnection ios nsurlsession

20
推荐指数
1
解决办法
3万
查看次数

使用后台配置时,NSURLSessionTask在超时后永远不会回调

我正在使用NSURLSessionDownloadTask后台会话来实现我的所有REST请求.这样我可以使用相同的代码,而不必考虑我的应用程序在后台或前台.

我的后端已经死了一段时间了,我借此机会测试了NSURLSession超时的行为方式.

令我惊讶的是,我的NSURLSessionTaskDelegate回调都没有被调用过.无论我在上面NSURLRequest或上面设置什么超时NSURLSessionConfiguration,我都没有从iOS收到任何回调,告诉我请求确实以超时完成.

也就是说,当我开始NSURLSessionDownloadTask一个后台会话时.应用程序在后台或前台发生相同的行为.

示例代码:

- (void)launchDownloadTaskOnBackgroundSession {
    NSString *sessionIdentifier = @"com.mydomain.myapp.mySessionIdentifier";
    NSURLSessionConfiguration *backgroundSessionConfiguration = [NSURLSessionConfiguration backgroundSessionConfiguration:sessionIdentifier];
    backgroundSessionConfiguration.requestCachePolicy = NSURLRequestReloadIgnoringCacheData;
    backgroundSessionConfiguration.timeoutIntervalForRequest = 40;
    backgroundSessionConfiguration.timeoutIntervalForResource = 65;
    NSURLSession *backgroundSession = [NSURLSession sessionWithConfiguration:backgroundSessionConfiguration delegate:self delegateQueue:[NSOperationQueue mainQueue]];

    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"http://www.timeout.com/"]];
    request.timeoutInterval = 30;
    NSURLSessionDownloadTask *task = [backgroundSession downloadTaskWithRequest:request];
    [task resume];
}

- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error {
    NSLog(@"URLSession:task:didCompleteWithError: id=%d, error=%@", task.taskIdentifier, error);
}
Run Code Online (Sandbox Code Playgroud)

但是,当我使用默认会话时,我会在30秒后收到错误回调(我在请求级别设置的超时).

示例代码:

- …
Run Code Online (Sandbox Code Playgroud)

ios nsurlsession nsurlsessionconfiguration nsurlsessiondownloadtask ios7.1

20
推荐指数
1
解决办法
1万
查看次数

如果在后台使用NSURLSessionDownloadTask时磁盘空间不足会发生什么?

在iOS 8.1应用程序中,我使用的NSURLSessionDownloadTask是在后台下载档案,有时会变得非常大.

一切正常,但如果手机磁盘空间不足,会发生什么?下载是否会失败,并表明存在剩余磁盘空间问题?有没有提前检查的好方法?

ios nsurlsession nsurlsessiondownloadtask

20
推荐指数
1
解决办法
834
查看次数

防止NSURLSession缓存响应

为什么它会缓存响应.它返回先前获取的响应.它甚至可以在关闭网络连接时工作.重置iOS模拟器似乎也不起作用.提出请求,然后再次使用Internet脱机工作(缓存).

public let urlSession: NSURLSession

public init()
{
    // ...

    var configuration = NSURLSessionConfiguration.defaultSessionConfiguration()
    configuration.requestCachePolicy = NSURLRequestCachePolicy.ReloadIgnoringLocalCacheData
    urlSession = NSURLSession(configuration: configuration)
}

func makeRequest(path: String, httpMethod:String, body:String?, baseUrl: String?, headers:[String:String]=[:], callback: JsonRequestCallback)
{
    let urlString = (baseUrl ?? customOAuth2Manager.API_URL) + path
    let url = NSURL(string: urlString)
    let request = oauthInstance.request(forURL: url!)

    request.HTTPMethod = httpMethod
    self.customOAuth2Manager.setupRequest(request)

    for (key, value) in headers {
        request.setValue(value, forHTTPHeaderField:key)
    }

    if let body = body where body != "" {
        let postData = (body as NSString).dataUsingEncoding(NSUTF8StringEncoding) …
Run Code Online (Sandbox Code Playgroud)

caching nsurlcache nsurlsession nsurlsessionconfiguration swift

20
推荐指数
2
解决办法
1万
查看次数

支持服务器的iOS 9 ATS SSL错误

我安装了Xcode 7并尝试在iOS 9下运行我的应用程序.我收到臭名昭着的错误:Connection failed! Error - -1200 An SSL error has occurred and a secure connection to the server cannot be made. 事情是我的服务器支持TLSv1.2并且我正在使用NSURLSession.

那可能是什么问题呢?

ssl objective-c ios nsurlsession ios9

20
推荐指数
3
解决办法
2万
查看次数

使用Alamofire而非NSURLSession/NSURLConnection进行网络化的优势是什么?

任何人都可以帮助我理解这些问题:使用Alamofire而不是NSURLSession/NSURLConnection有什么好处?

NSURLSession和NSURLConnection有什么区别?

mobile-application nsurlconnection nsurlsession alamofire

20
推荐指数
3
解决办法
7606
查看次数

在iOS9中不推荐使用NSURLConnection

我想下载一个带有a的文件NSURLRequest并将其保存但与该行一起保存

NSData * data = ... 发生错误.

NSURL *Urlstring = [NSURL URLWithString:@"http://yourdomain.com/yourfile.pdf"];
NSURLRequest *request = [NSURLRequest requestWithURL: Urlstring];
NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];

NSURL *documentsURL = [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject];
documentsURL = [documentsURL URLByAppendingPathComponent:@"localFile.pdf"];

[data writeToURL:documentsURL atomically:YES];
Run Code Online (Sandbox Code Playgroud)

警告消息是我应该使用NSURLSession dataTaskwithrequest"因为sendSynchronousRequest在iOS 9中已弃用,但这不起作用我希望有人可以帮助我

nsurlconnection ios nsurlsession ios9

19
推荐指数
1
解决办法
3万
查看次数

如何在Swift中创建NSURLSession POST请求

嗨,我是Swift的初学者,我正在尝试使NSURLSession"发布"请求发送一些参数,如下面的代码

根据我的下面的代码响应不是来自服务器可以有人帮助我

BackGroundClass: -

 import UIKit

protocol sampleProtocal{

    func getResponse(result:NSDictionary)
    func getErrorResponse(error:NSString)
}

class BackGroundClass: NSObject {

    var delegate:sampleProtocal?

    func callPostService(url:String,parameters:NSDictionary){


        print("url is===>\(url)")

        let request = NSMutableURLRequest(URL: NSURL(string:url)!)

        let session = NSURLSession.sharedSession()
        request.HTTPMethod = "POST"

        //Note : Add the corresponding "Content-Type" and "Accept" header. In this example I had used the application/json.
        request.addValue("application/json", forHTTPHeaderField: "Content-Type")
        request.addValue("application/json", forHTTPHeaderField: "Accept")

        request.HTTPBody = try! NSJSONSerialization.dataWithJSONObject(parameters, options: [])

        let task = session.dataTaskWithRequest(request) { data, response, error in
            guard data != nil else {
                print("no …
Run Code Online (Sandbox Code Playgroud)

ios nsurlsession swift

19
推荐指数
4
解决办法
3万
查看次数