2013-02-12 65 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

相關問題