使用NSURLConnection sendAsynchronousRequest

时间:2013-02-12 16:29:46

标签: objective-c asynchronous nsurlrequest

我在Xcode 4.5.2中有一个应用程序。它发送URL请求以下载图像并在图像视图中设置图像。我有以下代码可以很好地完成此任务:

dispatch_queue_t downloadQueue = dispatch_queue_create("Get Facebook Friend", NULL);
    dispatch_async(downloadQueue, ^{

self.firstFriendImage = [UIImage imageWithData:
                           [NSData dataWithContentsOfURL:
                            [NSURL URLWithString:
                             [[self.facebookPhotosAll objectAtIndex:self.randomIndex1]
                              objectForKey:@"pic_big"]]]];

dispatch_async(dispatch_get_main_queue(), ^{
            [self postDownloadTasks:self.topView setLabel:self.firstFriendLabel 
withFriendName:self.firstFriendName cropImage:self.firstFriendImage 
inImageView:self.friendOneView atYPoint:22];
  });
      });

所以尽管这段代码工作正常,但对于客观C来说是新手,我正试着探索一下这个语言,看看我怎么能做同样的事情。所以我尝试使用NSURLConnection sendAsynchronousRequest:方法(在这里查看一些示例之后),但我似乎无法使这个方法起作用。这就是我所做的:

 NSOperationQueue *queue = [[NSOperationQueue alloc]init];
NSString *string = [[self.facebookPhotosAll  
                   objectAtIndex:self.randomIndex1]objectForKey:@"pic_big"];

    [NSURLConnection sendAsynchronousRequest: [NSURL URLWithString:   
           string] queue:queue   
             completionHandler:^(NSURLResponse *response, NSData *data, NSError *error){
        // Make sure eveything is ok
        if(error){
            // do something
        }

        self.firstFriendImage = [UIImage imageWithData:data];
         dispatch_async(dispatch_get_main_queue(), ^{

            [self postDownloadTasks:self.topView setLabel:self.firstFriendLabel 
withFriendName:self.firstFriendName cropImage:self.firstFriendImage  
inImageView:self.friendOneView atYPoint:22];

         });

    }];

所以这段代码根本不起作用(它没有返回任何数据)。调用方法时应用程序崩溃,我收到以下消息:

**由于未捕获的异常'NSInvalidArgumentException'终止应用程序,原因:' - [NSURL _CFURLRequest]:无法识别的选择器发送到实例0xa39dd20'

有谁能告诉我如何使用NSURLConnection sendAsynchronousRequest方法完成我在第一个代码摘录中所做的事情?

1 个答案:

答案 0 :(得分:2)

在send asynchronousRequest方法中,您的URL字符串缺少某个部分。它应该像你的第一种方法一样有效:

[[self.facebookPhotosAll objectAtIndex:self.randomIndex1] objectForKey:@"pic_big"]