2014-06-15 10 views
7

Ich entwickle eine iOS-Anwendung und verwende SDWebImage als Image-Downloader-API.SDWebImage zeigt kein Bild an, obwohl das Bild auf dem Server remote existiert

Ich bin ein UICollectionView mit und ich tue es in der Methode

- (UICollectionViewCell *)collectionView:(SMToplinksCollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath

Einige Bilder heruntergeladen werden, und manche nicht. Diejenigen, die nicht heruntergeladen hat zeigt die Fehlermeldung:

2014-06-15 12:11:50.203 c_shadow_ios_iphone[6867:60b] ===Error:Error Domain=NSURLErrorDomain Code=-1100 "The operation couldn’t be completed. (NSURLErrorDomain error -1100.)"

Fehler -1100: NSURLErrorFileDoesNotExist

Auch scheint die UIImage Null zu sein.

Ich habe die URL geprüft, die SDWebImage zu herunterladen versucht und es wird mir das Bild richtig, so tritt der Fehler scheint nicht sinnvoll

Hier ist die Methode Code verwende ich:

- (UICollectionViewCell *)collectionView:(SMToplinksCollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath 
{  
SMToplinkCollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:TopLinksCollectionViewID forIndexPath:indexPath]; 

NSArray *collectionViewArray = [self getToplinksArrayAccordingToTheIndex:collectionView.index]; 

// CONFIGURE THE CELL 
SMTopLinksObject *dataObject = collectionViewArray[indexPath.item]; 

// 1. Set the toplink title 
cell.title  = dataObject.name; 

// 2. Get the default image and blur it 
cell.imageName = dataObject.localImageName; 

// 3. Activate the preloader that shows the loading status 

// 4. Load the image from the server 
SDWebImageManager *manager = [SDWebImageManager sharedManager]; 
NSString *toplinksGetRequest = dataObject.prepareToplinksGetRequest; 
NSURL *toplinksURL = [NSURL URLWithString:toplinksGetRequest]; 

NSLog(@"=== Trying to download image from URL:%@", toplinksGetRequest); 
[manager downloadWithURL:toplinksURL 
       options:0 
       progress:^(NSInteger receivedSize, NSInteger expectedSize){ 
        //progression tracking code       
       } completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished){ 
        if(finished) 
        { 
         NSLog(@"===image finished loading, image:%@", image); 
         NSLog(@"===Error:%@", error); 
        } 
        if (image) 
        { cell.shadowPageImageView.image = image; } 
}];  
NSLog(@"=========Cell:%@", cell); 
return cell; 
} 

Ausgabe

image is NIL

Error: Error Domain=NSURLErrorDomain Code=-1100 "The operation couldn’t be completed. (NSURLErrorDomain error -1100.)"

Was vermissen ich hier?

+0

haben Sie UIImageView + AFNetworking für Bilder verwendet? – Nirav

+0

Ich habe UIImageView + WebCache.h verwendet, wie es in der SDWebImage ReadMe – raven99

+1

vorgeschlagen wurde. Beheben Sie das Problem? Ich habe das ähnliche Problem. ty – George

Antwort

0

Versuchen mit folgendem Code

Import der Kategorie der Imageview #import <SDWebImage/UIImageView+WebCache.h> die bereits

Dann in der Zelle für cellForItemAtIndexPath

[cell.imgVwUser sd_setImageWithURL:[NSURL URLWithString:objPhoto.imageUrl] completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) { 
    DLogs(@"completed"); 

    [cell.loadIndicator stopAnimating]; 

}]; 
in SDWebImage ist
4
[cell.diviceIV sd_setImageWithURL:[NSURL URLWithString:imgStringUrl] placeholderImage:nil options:SDWebImageRetryFailed completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) { 
    if (image){ 
     // Set your image over here 
     }else{ 
      //something went wrong 
     } 

}]; 

Der wichtigste Punkt ist Optionen: SDWebImageRetryFailed-Option, die Sie in Ihrer Methode angeben müssen. Es funktioniert für mich können Sie es ausprobieren.

+0

Dieses "Feature" (failedURLs) ist im Grunde ein Bug, der direkt in SDWebImage eingebaut ist. Ich würde empfehlen, alternative Frameworks zu betrachten (es gibt viele). – kean

3

Ich hatte das gleiche Problem. Ich habe "Error Domain = SDWebImageErrorDomain Code = -1" versucht, eine nil URL zu laden ", aber das Bild ist in dieser bestimmten URL. Ich fand, dass der Fehler für Bilder mit niedriger Auflösung auftritt. Für eine bessere Bildqualität, das Laden auch geschieht. für eine bessere Auflösung Bilder den gleichen Code überprüfen.

0

ich das gleiche Problem gestoßen. ich habe versucht, den ganzen Weg oben erwähnt, konnte aber nicht gut funktionieren.

Schließlich fand ich den Grund heraus ist die Name der URL des Bildes Ich denke, dass IOS den chinesischen Namen der Bild-URL nicht unterstützt, also sollten Sie die URL transcodieren.

Beispiel:

url = [_img_url stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; 
0

For me the issue was very low resolution images. For high resolution images this works perfectly!!!!

0

Verwenden ähnliche

self.imgUserProfile.sd_setImage(with: imageUrl, placeholderImage: UIImage(named: "profile_placeholder"), options: SDWebImageOptions.refreshCached, progress: nil, completed: { (image, error, cache, url) in 
     if error == nil { 
      self.imgUserProfile.image = image 
     } 
    }) 
Verwandte Themen