parse.com PFQueryTableViewController が同じオブジェクトを複数回返します

StackOverflow https://stackoverflow.com//questions/21000605

  •  20-12-2019
  •  | 
  •  

質問

使用しようとしています (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath object:(PFObject *)object の表示をカスタマイズするには PFObject のデータ PFQueryTableViewController. 。だから私は自分の PFQuery 中のオブジェクト (PFQuery *)queryForTable 私の中で PFQueryTableViewController delegate 複数のオブジェクトを取得することになっています NSArray.

parse.comは送信/呼び出しを行うことになっていると思いました (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath object:(PFObject *)object 返されたオブジェクトごとに 1 回。ただし、引き続き返されることがわかりました 同じ 何度も反対します。

したがって、たとえば、3 回の 3 つの異なるオブジェクトの代わりに、 (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath object:(PFObject *)object が呼び出されると、同じオブジェクトが取得されます。ただし、データやクエリの問題ではありません。 (PFQuery *)queryForTable 、 直前

return query;

私は試した

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

これは、正しく取得された 3 つのオブジェクトを示しています。正確なのはどうですか 同じ によって処理されるクエリ PFQueryTableViewController 電話をかける (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath object:(PFObject *)object 3 回、3 つのオブジェクトを 1 つずつ送信するのではなく、最初のオブジェクトを 3 回送信しますか?

Wain の質問に答えて、コメントにいくつかの回答を追加しましたが、次のことも関連していると思われます。

- (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;
}
役に立ちましたか?

解決 2

Wainの質問のおかげで、私はObjectSdloadを記録しました。 特に、マッピングは私の質問に示されているように(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath object:(PFObject *)objectにあると考えられていました。しかし、NTHの間に文書を見ると、私は突然メソッド名が実際に-(PFObject *)objectAtIndex:(NSIndexPath *)indexPathになることに気づきました。それが呼ばれていなかったのも不思議ではなく、マッピングが効果的になったため、間違ったオブジェクトは-(PFObject *)objectAtIndexPath:(NSIndexPath *)indexPathに渡されていました。(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath object:(PFObject *)objectに変更したとき、問題は解決しました!

どうすれば間違ったメソッド名を持っていますか?私はAnypicコードからマッピングの例をコピーしたことを私は見つけましたので、parse.comがianpicが書き込まれた後にメソッド名を変更しましたか?誰かがそれを検証できますか?私はParse Framework 1.2.14

を使っています

他のヒント

私も同様の問題を抱えていて、私がやったことは次のとおりです。

1 - 使用する代わりに PFQueryTableViewController 通常のを使用してください UITableViewController.

2 - 方法を変更する queryForTable:(void).

- (void)queryForTable {

3 - 削除 PFQueryTableViewメソッドと実装 DataSource方法。

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

電話 [self queryForTable]viewDidLoad .h ファイルで宣言した後。

ブロックを使用しない場合は、単に作成するだけです NSArray property そしてそれに移入します queryForTable:

self.yourarray = [query findobjects];

ブロックを使用する場合は、必ず入力してください NSArrayブロック内でテーブルビューをリロードします。

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

これが私がそれを機能させる方法です。それが役に立てば幸い。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top