rafraà®chir les cellules d'un NRGridView dans un thread

bonjour, je fais appel à  vous après avoir passer beaucoup de temps à  résoudre un problème sans résultat.



Actuellement je créé une vue avec des cellules comportant chacune une image. J'obtiens ces images à  partir d'un tableau que j'appelle "picturesList".



Une fois cette vue affichée, je lance un thread chargé de mettre à  jour les images de ces cellules.



Voici la partie du code du thread chargé de rafraà®chir la vue:


<br />
//appel de la fonction de rafraà®chissement dans le thread UI<br />
...<br />
//changer la liste des image dans le tableau d&#39;image (picturesList)<br />
...<br />
[self performSelectorOnMainThread:@selector(refreshAllViews) withObject:nil waitUntilDone:NO];<br />
...<br />
-(void) refreshAllViews<br />
{<br />
          for(int i=0; i&lt;[picturesList count]; i++)<br />
          {<br />
                  [[self gridView:[self gridView] cellForItemAtIndexPath: [NSIndexPath indexPathForItemIndex:i inSection:0]]imageView].image=[picturesList objectAtIndex:i];<br />
          }<br />
         //rafrachissement de la NRGridView<br />
         // [[self gridView] reloadInputViews];  <br />
         [[self gridView] reloadData];<br />
}<br />




Le problème étant que les image des cellules ne change pas. Pouvez-vous m'aidez ? Merci !

Réponses

  • JegnuXJegnuX Membre
    juillet 2012 modifié #2
    [[self gridView:[self gridView] cellForItemAtIndexPath: [NSIndexPath indexPathForItemIndex:i inSection:0]]imageView].image=[picturesList objectAtIndex:i];<br />
    




    Grrrr, pas très lisible ça... Bon si on remet au propre :


    NSIndexPath *indexPath = [NSIndexPath indexPathForItemIndex:i inSection:0];<br />
    NRGridViewCell *cell = [self gridView:[self gridView] cellForItemAtIndexPath: indexPath];<br />
    [cell imageView].image = [picturesList objectAtIndex:i];<br />
    




    Et là  donc on voit que c'est la seconde ligne qui va pas : tu n'utilises pas la bonne méthode pour récupérer la cell.

    Essaie avec -cellAtIndexPath: sur ta gridview :


    NSIndexPath *indexPath = [NSIndexPath indexPathForItemIndex:i inSection:0];<br />
    NRGridViewCell *cell = [[self gridView] cellAtIndexPath: indexPath];<br />
    [cell imageView].image = [picturesList objectAtIndex:i];<br />
    








    Mais ceci dit, je comprend pas trop : puisque après tu fait un reloadData, c'est sensé appeler la méthode du data source pour raffraichir les cell visibles, et donc à  ce moment là  tu peux mettre à  jour ton imageView. Non ?
  • J'ai déjà  essayé avec -cellAtIndexPath: sur ma gridView, mais rien n'y fait la cell ne se rafraà®chi pas.
  • AliGatorAliGator Membre, Modérateur
    Nan mais je comprend pas non plus... pourquoi ne pas faire un reloadData (qui va appeler tes méthodes de DataSource correctement) ?!
  • C'est ce que je fais, mais il ne me rafraichis rien du tout:
    [[self gridView] reloadData]
    
  • C'est que ta méthode du datasource est mal implémentée.



    Copie colle nous ton implémentation de[font=courier new,courier,monospace] -(NRGridViewCell *)gridView:(NRGridView *)gridView cellForItemAtIndexPath:(NSIndexPath *)indexPath[/font] pour voir
  • - ([color=#578187]SubNRGridViewCell[/color]*) gridView:([color=#578187]NRGridView[/color] *)gridView cellForItemAtIndexPath:([color=#7134aa]NSIndexPath[/color] *)indexPath<br />
    <br />
    {<br />
        [color=#b41ca4]if[/color]([color=#578187]OkMemory[/color]==[color=#b41ca4]YES[/color])<br />
        {[color=#578187]<br />
    [color=#000000]        [[/color]tabMemoryScrollOfCreatedFile[color=#000000] [/color][color=#401082]addObject[/color][color=#000000]:indexPath];[/color][/color]<br />
        }[color=#1c8600]<br />
    [color=#000000]    [/color]//static [/color]<br />
        [color=#7134aa]NSString[/color] *MyCellIdentifier = [[color=#7134aa]NSString[/color] [color=#401082]stringWithFormat[/color]:[color=#c72c25]@&quot;%uMyCellIdentifier&quot;[/color],indexPath.[color=#7134aa]row[/color]];<br />
    <br />
        [color=#578187]SubNRGridViewCell[/color]* cell = ([color=#578187]SubNRGridViewCell[/color]*)[gridView [color=#38595d]dequeueReusableCellWithIdentifier[/color]:MyCellIdentifier];<br />
    <br />
        [color=#b41ca4]if[/color](cell == [color=#b41ca4]nil[/color])<br />
        {<br />
            cell = [[[color=#578187]SubNRGridViewCell[/color] [color=#401082]alloc[/color]] [color=#38595d]initWithReuseIdentifier[/color]:MyCellIdentifier];[color=#401082]<br />
    [color=#000000]        [[cell [/color][color=#38595d]textLabel[/color][color=#000000]] [/color]setFont[color=#000000]:[[/color][color=#7134aa]UIFont[/color][color=#000000] [/color]boldSystemFontOfSize[color=#000000]:[/color][color=#3d01d9]11.5[/color][color=#000000]]]; [/color][/color]<br />
        }<br />
    <br />
        cell.[color=#578187]imageView[/color].[color=#7134aa]image[/color] = [[[[color=#578187]browseFeature[/color] [color=#38595d]getListFiles[/color]] [color=#401082]objectAtIndex[/color]:indexPath.[color=#7134aa]row[/color]] [color=#38595d]getImageVht[/color]];<br />
       [color=#b41ca4]if[/color]([[[[[color=#578187]browseFeature[/color] [color=#38595d]getListFiles[/color]] [color=#401082]objectAtIndex[/color]:indexPath.[color=#7134aa]row[/color]] [color=#38595d]getNom[/color]] [color=#401082]length[/color]]&gt;[color=#3d01d9]33[/color])<br />
       {<br />
           [color=#7134aa]NSString[/color] * text=[[color=#7134aa]NSString[/color] [color=#401082]stringWithFormat[/color]:[color=#c72c25]@&quot;%@ ...&quot;[/color],[[[[[color=#578187]browseFeature[/color] [color=#38595d]getListFiles[/color]] [color=#401082]objectAtIndex[/color]:indexPath.[color=#7134aa]row[/color]] [color=#38595d]getNom[/color]] [color=#401082]substringToIndex[/color]:[color=#3d01d9]25[/color]]];<br />
           cell.[color=#578187]textLabel[/color].[color=#7134aa]text[/color] = text;<br />
       }[color=#b41ca4]else[/color]<br />
       {<br />
            cell.[color=#578187]textLabel[/color].[color=#7134aa]text[/color] = [[[[color=#578187]browseFeature[/color] [color=#38595d]getListFiles[/color]] [color=#401082]objectAtIndex[/color]:indexPath.[color=#7134aa]row[/color]] [color=#38595d]getNom[/color]];<br />
       }[color=#578187]<br />
    [color=#000000]    cell.[/color]textLabel[color=#000000].[/color][color=#7134aa]textColor[/color][color=#000000]=[/color]myCell[color=#000000];[/color][/color]<br />
        [color=#b41ca4]return[/color] cell;<br />
    }
    
Connectez-vous ou Inscrivez-vous pour répondre.