2013-02-12 59 views
2

我在Xcode 4.5.2中有一个应用程序。它发送一个URL请求来下载图像并将图像设置在图像视图中。我有以下的代码工作正常做到这一点:使用NSURLConnection sendAsynchronousRequest

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方法完成我在第一个代码片段中所做的操作吗?

+0

,我不认为这是你的问题,但它是您提供的队列中运行,完成块(不要求) - 如果你使用[NSOperationQueue mainQueue],那么你不需要那里的dispatch_async的东西。 – rdelmar 2013-02-12 16:48:46

+0

什么说NSError对象?在你的if语句中只是一个推荐。你有没有用NSLog()做过测试? – 2013-02-12 16:44:56

+0

它甚至不足以创建错误,只要该方法被调用程序崩溃与以下内容: - [__ NSDictionaryI长度]:无法识别的选择器发送到实例0xa2da000 ...由于未捕获的异常终止应用程序' NSInvalidArgumentException',原因:' - [__ NSDictionaryI长度]:无法识别的选择发送到实例0xa2da000' – jac300 2013-02-12 16:49:25

回答

2

在发送asynchronousRequest方法中,您的URL字符串缺少一个部分。它应该像您的起作用的第一种方法:

+0

谢谢,我刚刚看到并修复了它,但它仍然无效!现在,当它崩溃时,我得到以下错误:**终止应用程序由于未捕获的异常'NSInvalidArgumentException',原因:' - [NSURL _CFURLRequest]:无法识别的选择器发送到实例0xa39dd20' – jac300 2013-02-12 17:08:39

+0

@ user1697845,我错过了代码中的错误 - 你需要创建一个NSURLRequest。你只是提供一个不是URLRequest的URL作为sendAsync的第一个参数.... – rdelmar 2013-02-12 17:10:30

+0

就是这样!谢谢! – jac300 2013-02-12 17:14:46

相关问题