1

我正在尝试使用(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath object:(PFObject *)object自定义PFObject数据在PFQueryTableViewController. 因此,我在我的对象中构造我的对象PFQuery,该对象应该在.(PFQuery *)queryForTablePFQueryTableViewController delegateNSArray

我认为 parse.com 应该(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath object:(PFObject *)object为每个返回的对象发送/调用一次。但是,我发现它会多次返回同一个对象。

因此,例如,(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath object:(PFObject *)object我得到的是同一个对象,而不是 3 次调用 3 个不同的对象。但这不是数据或查询的问题,因为在结束时(PFQuery *)queryForTable,就在之前

return query;

我试过

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

这显示了正确获得的 3 个对象。如何通过调用3 次处理完全相同的查询,而不是一个一个地发送 3 个对象,而是发送第一个对象 3 次?PFQueryTableViewController(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath object:(PFObject *)object

针对 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;
}
4

2 回答 2

2

我有一个类似的问题,我所做的是:

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
    {
    }

在 .h 文件[self queryForTable]中声明后调用。viewDidLoad

如果您不使用块,则只需创建NSArray property并填充queryForTable

self.yourarray = [query findobjects];

如果你使用块,只要确保你NSArray在块内填充并重新加载 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];
    }); 
}];

这就是我让它工作的方式。希望能帮助到你。

于 2014-01-09T19:33:59.577 回答
1

感谢 Wain 的问题,我记录了 objectsDidLoad: 并发现正在加载正确的 3 个对象,因此必须是 PFQueryTableViewController 没有以正确的顺序加载它们(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath object:(PFObject *)object

特别是,映射应该-(PFObject *)objectAtIndex:(NSIndexPath *)indexPath在我的问题中指出。但是在第N次查看文档时,我突然注意到方法名称实际上应该是-(PFObject *)objectAtIndexPath:(NSIndexPath *)indexPath. 难怪它没有被调用,并且我的映射开始生效,因此错误的对象被传递给(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath object:(PFObject *)object. 当我将其更改为 时-(PFObject *)objectAtIndexPath:(NSIndexPath *)indexPath,问题就消失了!

我怎么会得到错误的方法名称?我发现我已经从 anypic 代码中复制了该映射示例,所以我猜测 parse.com 在编写 anypic 之后的某个时间更改了方法名称?任何人都可以验证吗?我正在使用解析框架 1.2.14

于 2014-01-10T05:17:40.180 回答