iOS requête (Parse SDK) comment éviter les doublons ?

JopaoneJopaone Membre
janvier 2017 modifié dans API UIKit #1

Bonjour,


Désolé encore une question (la dernière) mais je profite qu'il y ait des connaisseurs de Parse sur le forum !


Je fais une requête très simple pour afficher des objets :



- (PFQuery *)queryForCollection
{

PFQuery *query = [PFQuery queryWithClassName:@Activity];

[query whereKey:@type equalTo:@likes];
[query includeKey:@toObject];

if ([self.item count] == 0) {

}

[query orderByDescending:@createdAt];

return query;
}
 

Comme vous pouvez l'observer cette requête porte sur la classe "Activity" à  partir de laquelle sont affichés tous les objets "likés" par les utilisateurs.

Le "toObject" pointe sur une seconde classe "object" sur laquelle sont décrits les objets.

 

La requête fonctionne très bien mais peut afficher des doublons si un objet est liké par plusieurs utilisateurs. 

Mon problème : comment empêcher que cette requête puisse afficher plusieurs fois un même objet ? Autrement dit, comment éviter les doublons ?

Si ça peut aider, la classe "object" comporte une String "objectId" sur laquelle on pourrait se référer.

 

Quelqu'un aurait une idée ou une piste à  me suggérer ? Merci par avance !

Mots clés:

Réponses

  • Joanna CarterJoanna Carter Membre, Modérateur
    janvier 2017 modifié #2
    Encore une fois, s'il te plaà®t utiliser les balises code pour les morceaux de code
  • Joanna désolé c'est fait !



  • [[query includeKey:@toObject]getFirstObject];

    j'ai tenté quelque chose comme ceci pour ne garder que le dernier "toObject" (et donc éviter les doublons)


    mais aucun effet sur le résultat de la requête. 


    Quelqu'un aurait une idée ou une piste qui pourrait m'aiguiller ? Merci par avance


  • Je reviens sur ce sujet, je suis sur une piste de reflexion afin d'éviter d'afficher un doublon.


     


    Pour afficher mes objets , j'utilise une collectionView de cette manière :



    - (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath object:(PFObject *)object
    {
    UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@cell forIndexPath:indexPath];


    PFUser *bringobject = [object objectForKey:@toObject];


    PFFile *objectPicture = [bringobject objectForKey:@imageFile];
    PFImageView *thumbnailImageView = (PFImageView*)[cell viewWithTag:2];
    thumbnailImageView.file = objectPicture;

    [thumbnailImageView loadInBackground];
    return cell;

    }


    mon idée serait d'ajouter une condition :


    si l' "objectId" relatif à  cet objet existe déjà  = ne pas afficher cet objet


     


    pensez-vous que je puisse ajouter cette condition et si oui comment la formuler ?


    Merci par avance pour votre aide


  • LeChatNoirLeChatNoir Membre, Modérateur

    Après une rapide recherche de PFQuery sur le net, il s'avère qu'il n'y a pas d'options pour faire un distinct.


     


    Donc, il te faut éliminer les doublons par toi-même.


     


    Tu mets le résultat dans un tableau et tu élimines les doublons avec un truc du genre :



    NSOrderedSet *orderedSet = [NSOrderedSet orderedSetWithArray:yourArray];
    NSArray *arrayWithoutDuplicates = [orderedSet array];
  • JopaoneJopaone Membre
    janvier 2017 modifié #7

    Merci pour ton aide Le Chat Noir ! Effectivement dans un premier temps je dois éliminer "manuellement" tous les doublons déjà  enregistrés  B)


    Ensuite j'ai résolu mon problème en ajoutant un point de repère "tag" lors de l'enregistrement d'un like tout en effaçant simultanément le précédent repère sur un même objet.


    Dans ma requête finale je n'ai plus qu'à  inclure tous les likes avec le repère "tag" : ça évite ainsi tous les doublons


Connectez-vous ou Inscrivez-vous pour répondre.