2010-05-12 7 views
2

Ceci est une question angoissante recrue, mais ici j'apprends un nouveau langage et cadre, et j'essaie de répondre à la question "Qu'est-ce que la vérité?" en ce qui concerne Obj-C. J'essaye de charger paresseux les images à travers le réseau. J'ai une classe de données appelée événement qui a des propriétés dont:Objective-C Définition

@property (nonatomic, retain) UIImage image; 
@property (nonatomic, retain) UIImage thumbnail; 

dans mon AppDelegate, je vais chercher un tas de données sur mes événements (ce qui est une application qui affiche des listes d'événements d'arts locaux), et pré-ensembles chaque événement.image à mon "no-image.png" par défaut.

Ensuite, dans le UITableViewController où je vois ces choses, je fais:

if (thisEvent.image == NULL) { 
    NSLog(@"Going for this item's image"); 
    UIImage *tempImage = [UIImage imageWithData:[NSData dataWithContentsOfURL: 
        [NSURL URLWithString: 
        [NSString stringWithFormat: 
        @"http://www.mysite.com/content_elements/%@_image_1.jpg", 
           thisEvent.guid]]]]; 
    thisEvent.image = tempImage; 

} 

On n'a jamais cet appel NSLog. Test thisEvent.image pour NULLness n'est pas la chose. J'ai essayé aussi == nil, mais cela ne fonctionne pas non plus.

Répondre

4

chargement Lazy ressemblera à ceci:

@property (nonatomic, read-only) UIImage *image; 

- (UIImage *)image { 
    if (!image) { 
     image = [[UIImage imageWithData:[NSData dataWithContentsOfURL: 
       [NSURL URLWithString: 
       [NSString stringWithFormat: 
       @"http://www.mysite.com/content_elements/%@_image_1.jpg", 
          thisEvent.guid]]]] retain]; 
    } 

    return image; 
} 

Et ne pas oublier de libérer l'image dans dealloc.

Cordialement,

+1

Oh mec. Vous parlez de le faire correctement dans ma classe de modèle d'événement, non? C'est tellement mieux que de le faire dans le contrôleur de table vu que je construis la cellule pour contenir l'objet. Merci! –

4

Si vous définissez l'image sur no-image.png, elle ne sera pas nulle (Objective-C utilise nil pour les valeurs d'objet, vous devriez utiliser ceci au lieu de NULL, qui a un but différent, bien qu'il ait le même valeur).

2

Vous ne voulez vraiment pas charger des images à partir du Web que vous construisez les cellules de table, votre défilement de table sera terriblement lent.

Voir l'exemple d'Apple LazyTableImages pour savoir comment faire cela et this SO question peut aussi aider.

+0

Ma prochaine question SO allait être "pourquoi mon tableau défile-t-il si terriblement lentement?". Merci! –

Questions connexes