2013-08-19 1 views
1

J'utilise des services Web pour le développement d'applications iPhone. J'ai utilisé NSDictionary pour récupérer des données en utilisant JSONParsing. Ca vient vite des services web mais c'est trop lent en se liant à ma vue/XIB.Je ne comprends pas quel est le vrai problème avec ça.Parce que ça marche vite sur android mais pas sur iPhone.Est-ce leur toute autre solution ou exemple à résoudre ce problème.La liaison de données à afficher est trop lente lors de l'utilisation du service Web

Code -

- (void)viewDidLoad 
{ 
    //returning cell with name & logo 
    NSLog(@"activity array = %@",activityArray); 
    addNameList = [[NSMutableArray alloc]init]; 
    addThumbnails = [[NSMutableArray alloc]init]; 
    addActivityId = [[NSMutableArray alloc]init]; 

    for (int x=0; x<[activityArray count]; x++) 
    { 
     NSDictionary* toDist = [activityArray objectAtIndex:x]; 
     [addNameList addObject:[toDist objectForKey:@"activity"]]; 
     [addThumbnails addObject:[toDist objectForKey:@"icon"]]; 
     [addActivityId addObject:[toDist objectForKey:@"id"]]; 
    } 

    activityList = addNameList; 
    thumbnails = addThumbnails; 
    activityIdList = addActivityId; 
} 

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *cellIdentifier = @"Cell"; 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier]; 
    if (cell == nil) 
    { 
     cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier]; 
    } 
    NSString *str = [NSString stringWithFormat:@"%@",[thumbnails objectAtIndex:indexPath.row]]; 
    cell.imageView.image = [UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:str]]]; 
    cell.textLabel.text = [activityList objectAtIndex:indexPath.row]; 

    UIImageView *backImage = [[UIImageView alloc] initWithFrame:CGRectMake(20,20,277,58)]; 
    backImage.backgroundColor = [UIColor clearColor]; 
    backImage.opaque = NO; 
    backImage.image = [UIImage imageNamed:@"cellBackgroundImage.png"]; 
    cell.backgroundView = backImage; 
    return cell; 

} 
+0

Votre question est connecté à distance à ne pas Xcode. Il se trouve que c'est l'idée que vous utilisez. –

+0

S'il vous plaît montrer du code, en particulier lorsque vous liez les données à la vue. Et mettez quelques détails sur la façon dont vous avez découvert que la requête est lente mais que la liaison de données ne l'est pas. –

+0

Assurez-vous que vous mettez à jour votre interface utilisateur sur le thread principal. Il est possible que votre téléchargement se fasse sur un thread de fond avec lequel vous mettez à jour votre vue (ce que vous ne devriez pas faire). Il semblerait que votre interface utilisateur se mette à jour lentement à cause de cela. Comme le dit @HermannKlecker, publiez du code. – sbarow

Répondre

0

Si vous ne l'avez pas comment charger les données d'image en arrière-plan

NSString *str = [NSString stringWithFormat:@"%@",[thumbnails objectAtIndex:indexPath.row]]; 
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0), ^{ 

    NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:str]]; 

    dispatch_async(dispatch_get_main_queue(), ^{ 
     cell.imageView.image = [UIImage imageWithData:data]; 
    }); 
}); 
+0

Vous ne savez pas ce que vous voulez dire par votre commentaire pouvez-vous expliquer? – sbarow

+0

Cela n'a toujours pas de sens? Je ne suis pas sûr de ce que vous demandez? – sbarow

+0

Jetez un oeil à cet exemple de code d'Apple http://developer.apple.com/library/ios/samplecode/LazyTableImages/Introduction/Intro.html – sbarow

1

Je ne reçois pas quelle est la véritable question à ce sujet.

Nous non plus, franchement. Il est impossible de dire pourquoi votre code est lent si vous ne nous le montrez pas. On dirait que le vrai problème est que vous n'êtes pas sûr de savoir quelle partie de votre code est lente. Alors laissez-moi vous dire comment comprendre cela: profil votre code. Xcode inclut un outil puissant appelé Instruments qui vous permet de voir combien de temps votre application dépense dans chaque méthode, quelle quantité de mémoire elle utilise, quelle puissance, etc. Expliquant comment l'utiliser est un peu trop en profondeur pour cette réponse, s'il vous plaît commencer par le Instruments User Guide La version courte est que vous pouvez utiliser la commande de menu Produit-> Test pour lancer votre application sous Instruments, et ce faisant, vous permettra collecter et analyser un certain nombre de types différents de données de performance. Si vous trouvez une méthode de haut niveau qui semble prendre plus de temps que prévu, vous pouvez explorer la méthode et observer les méthodes qu'elle appelle et les méthodes que ces méthodes appellent à leur tour. Armé de l'information que vous pouvez obtenir d'Instruments, vous n'aurez pas à vous demander pourquoi votre code est lent - vous serez capable de trouver la réponse empiriquement.

Questions connexes