Question

Je suis en train d'utiliser (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath object:(PFObject *)object pour personnaliser l'affichage de PFObject de données dans un PFQueryTableViewController.Donc je construire mon PFQuery objet (PFQuery *)queryForTable dans mon PFQueryTableViewController delegate qui est censé pour obtenir les différents objets dans un NSArray.

J'ai pensé que parse.com est censé puis envoyer/appel (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath object:(PFObject *)object une fois pour chacun des objets retournés.Cependant, je trouve qu'il conserve son retour le même objet à plusieurs reprises.

Ainsi, par exemple, au lieu de 3 objets différents pour les 3 fois (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath object:(PFObject *)object est appelé, j'ai le même objet.Mais ce n'est pas un problème avec les données ou la requête, car à la fin de (PFQuery *)queryForTable juste avant

return query;

J'ai essayé

[query findObjectsInBackgroundWithBlock:^(NSArray *resultsNow,NSError *error) {NSLog(@"We have the following: %@", resultsNow);}];
 sleep(5);

et cela montre les 3 objets obtenus correctement.Comment est-ce que la conception exacte même requête lorsqu'il est manipulé par PFQueryTableViewController l'appel (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath object:(PFObject *)object 3 fois, au lieu d'envoyer les 3 objets un par un, il envoie le premier 3 fois?

En réponse à Wain de questions, j'ai ajouté quelques réponses dans les commentaires, mais aussi les suivantes semble pertinente:

- (PFObject *)objectAtIndex:(NSIndexPath *)indexPath {
// overridden, since we want to implement sections
if (indexPath.section < self.objects.count) {
    return [self.objects objectAtIndex:indexPath.section];
}

return nil;
}
Était-ce utile?

La solution 2

Grâce à Wain de la question, je me suis connecté objectsDidLoad:et a trouvé que le bon 3 objets ont été chargement, si elle devait être une question de la PFQueryTableViewController tout simplement pas de les charger dans le bon ordre dans (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath object:(PFObject *)object.

En particulier, la cartographie a été censé être dans -(PFObject *)objectAtIndex:(NSIndexPath *)indexPath comme indiqué dans ma question.Mais en regardant la documentation pour la Énième fois, j'ai soudain remarqué que le nom de la méthode doit être réellement -(PFObject *)objectAtIndexPath:(NSIndexPath *)indexPath.Pas étonnant, il n'a pas été appelé, et ma cartographie était entrée en vigueur, et donc le mauvais objet a été transmis à (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath object:(PFObject *)object.Quand je l'ai changé pour -(PFObject *)objectAtIndexPath:(NSIndexPath *)indexPath, le problème a disparu!

Comment aurais-je eu le tort le nom de la méthode?J'ai trouvé que j'avais copié que la cartographie de l'exemple de la anypic code, donc je suppose que parse.com changé le nom de la méthode, peu après anypic a été écrit?Quelqu'un peut-il vérifier?Je suis à l'aide d'analyser cadre 1.2.14

Autres conseils

J'ai eu un problème similaire, et ce que j'ai fait:

1 - au Lieu d'utiliser PFQueryTableViewController juste une utilisation régulière UITableViewController.

2 - Changement de la méthode queryForTable:pour (void).

- (void)queryForTable {

3 - Supprimer PFQueryTableViewles méthodes et les mettre en œuvre DataSourcedes méthodes.

    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
    {
    }
    - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
    {
    }
    - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
    {
    }

Appel [self queryForTable] dans viewDidLoad après avoir déclaré dans .h fichier.

Si vous n'utilisez pas le bloc, vous venez de créer NSArray property et de le remplir sur queryForTable:

self.yourarray = [query findobjects];

Si vous utilisez des blocs, assurez-vous de remplir NSArrayà l'intérieur du bloc et de le recharger tableview.

[query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {

    if (error) {
        // There was an error, do something with it.
    }
    else {
        self.yourArray = objects;
    }
    // Reload your tableView Data
    dispatch_async(dispatch_get_main_queue(), ^{
        [self.tableView reloadData];
    }); 
}];

C'est de cette façon que j'ai eu de travail.Espérons que cela aide.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top