代码之家  ›  专栏  ›  技术社区  ›  Khaled Barazi

对于没有数据返回的网络调用来说,使用NSURLRequest+NSURLConnection似乎有些过头了

  •  0
  • Khaled Barazi  · 技术社区  · 12 年前

    全部的

    这可能看起来很简单,但我已经看过URL加载系统程序指南和各种NSURL。。。。上课却找不到我的答案。

    我只是想从应用程序打一个简单的电话到一个网站,预订一个聚会地点:

    NSString *path=[NSString stringWithFormat:@"http://www.myparty123.com/ireservedURL.asp?Nickname=%@&Seat=%i&Email=%@&Currentparty=%i",john,5432,john@yahoo.com,6598];
    NSURL* reservationURL =[NSURL URLWithString:path];
    NSData *call= [NSData dataWithContentsOfURL:reservationURL];   
    

    这似乎是一种简单的方法,但我收到了这样的警告,即我没有使用“call”变量。在没有数据返回的情况下使用NSData进行调用似乎有些过头了。

    然而,创建一个NSURLRequest并启动一个NSURLConnection,然后用该请求实现委托似乎也有些过头了。

    我错过了什么。

    谢谢 公里

    2 回复  |  直到 12 年前
        1
  •  5
  •   Reid Main    12 年前

    NSURLConnection有一个名为sendSynchronousRequest:returningResponse:error:的方法,该方法允许您从URL下载NSData,而无需实现NSURLConnection委托。

    因此,您的代码可以被重写:

    NSString *path = [NSString stringWithFormat:@"http://www.myparty123.com/ireservedURL.asp?Nickname=%@&Seat=%i&Email=%@&Currentparty=%i",@"john",5432,@"john@yahoo.com",6598];
    NSURL *url = [NSURL URLWithString:path];
    NSURLRequest *request = [NSURLRequest requestWithURL:url];
    [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
    

    您将不再收到警告,因为您没有将数据分配给无用的变量。如果您想知道响应是否成功,您可以创建一个NSURLResponse变量,并将其传递到sendSynchronousRequest方法调用中。

    需要注意的是,这个方法会阻止你在任何线程上调用它。因此,如果你在UI线程上调用这个方法,下载需要10秒,用户将无法与应用程序交互。实现NSURLConnection委托或使用sendAsynchronousRequest:queue:completeHandler:方法将不会阻塞在其上使用的线程。

    您也可以将此代码封装在NSInvocationOperation中,并将其添加到NSOperationQueue中,或者查看类似的内容 AFNetworking

        2
  •  0
  •   Jakob W    12 年前

    据了解,发送请求的最简单方法是 + (id)stringWithContentsOfURL:(NSURL *)url encoding:(NSStringEncoding)enc error:(NSError **)error 方法 NSString