parse.com PFQueryTableViewController が同じオブジェクトを複数回返します
-
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];
});
}];
これが私がそれを機能させる方法です。それが役に立てば幸い。