Domanda

Sto cercando di utilizzare (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath object:(PFObject *)object per personalizzare la visualizzazione dei dati PFObject in un PFQueryTableViewController. Quindi costruisco il mio oggetto PFQuery in (PFQuery *)queryForTable nel mio PFQueryTableViewController delegate che dovrebbe ottenere gli oggetti multipli in un NSArray.

Ho pensato che Parse.com dovrebbe quindi inviare / chiamare (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath object:(PFObject *)object una volta per ciascuno degli oggetti restituiti. Tuttavia, trovo che mantiene il restituzione del stesso oggetti più volte.

Pertanto, ad esempio, invece di 3 diversi oggetti per il 3 volte (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath object:(PFObject *)object viene chiamato, ottengo lo stesso oggetto. Ma non è un problema con i dati o la query, perché alla fine del (PFQuery *)queryForTable, appena prima

return query;
.

Ho provato

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

E questo mostra i 3 oggetti ottenuti correttamente. Come è che la query esatta stessa quando viene gestita da PFQueryTableViewController Chiamata (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath object:(PFObject *)object 3 volte, invece di inviare i 3 oggetti uno per uno, invia il primo 3 volte?

In risposta alle domande di Wain, ho aggiunto alcune risposte nei commenti, ma anche il seguente sembra 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;
}
.

È stato utile?

Soluzione 2

Grazie alla domanda di Wain, ho registrato oggettiDidarlo: e ho scoperto che i 3 oggetti corretti erano carichi, quindi doveva essere una questione di PFQueryTableViewController non lo caricando nella giusta sequenza in (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath object:(PFObject *)object.

In particolare, la mappatura avrebbe dovuto essere in -(PFObject *)objectAtIndex:(NSIndexPath *)indexPath come indicato nella mia domanda.Ma guardando la documentazione per l'Nth Time, improvvisamente ho notato che il nome del metodo dovrebbe effettivamente essere -(PFObject *)objectAtIndexPath:(NSIndexPath *)indexPath.Non c'è da stupirsi che non venisse chiamato, e la mia mappatura stava entrando in vigore, e quindi l'oggetto sbagliato è stato passato a (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath object:(PFObject *)object.Quando l'ho cambiato in -(PFObject *)objectAtIndexPath:(NSIndexPath *)indexPath, il problema è andato via!

Come potrei avere il nome del metodo sbagliato?Ho scoperto che avevo copiato quell'esempio di mappatura dal codice Anypic, quindi suppongo che Parse.com abbia cambiato il nome del metodo qualche volta dopo che l'Anypic è stato scritto?Qualcuno può verificarlo?Sto usando Parse Framework 1.2.14

Altri suggerimenti

Ho avuto un problema simile e quello che ho fatto è stato:

1 - Invece di usare PFQueryTableViewController usa semplicemente UITableViewController regolari.

2 - Cambia il metodo queryForTable:to (void).

- (void)queryForTable {

3 - Elimina generacodicitagcodemethods e implementare PFQueryTableViewmethods.

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

Chiama DataSource in [self queryForTable] dopo averlo dichiarato nel file .h.

Se non si utilizza il blocco, è appena creato viewDidLoad NSArray e popolati su property:

queryForTable

Se si utilizza il blocco, assicurati di compilare il blocco self.yourarray = [query findobjects];insidE e ricarica la tabella.

[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];
    }); 
}];
.

Questo è il modo in cui ho capito.Spero che aiuti.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top