【问题标题】:PFQueryTableViewController with 3 Sections具有 3 个部分的 PFQueryTableViewController
【发布时间】:2015-02-10 01:04:01
【问题描述】:

我的解析数据库中有一个“游戏”表,其中包含以下相关列:

  • isOver(布尔值)
  • whoseTurn (Relation:_User)(游戏可以有多个玩家,因此可以同时轮到多个人)
  • 玩家(关系:_用户)

我需要查询这个表并在 tableview 的 3 个单独部分中显示结果:

  • '轮到我了'
  • '轮到他们了'
  • “游戏结束”

我正在考虑使用以下查询以及此处给出的答案中的一些代码:https://parse.com/questions/using-pfquerytableviewcontroller-for-uitableview-sections

PFQuery *query = [PFQuery queryWithClassName:self.parseClassName];

    [query whereKey:@"players" equalTo:[PFUser currentUser]];

    //BREAK UP INTO SECTIONS
    [query orderByDescending:@"isOver"];
    [query addDescendingOrder:@"whoseTurn"];

如何在 3 个不同的 tableview 部分中显示结果?

【问题讨论】:

    标签: ios objective-c uitableview parse-platform pfquery


    【解决方案1】:

    这个问题包含两个挑战,对于PFQueryTableVC 来说,挑战太多了。您站点的帖子表明您可以通过一些额外的覆盖获得部分,但没有涵盖的是您的模型通过 PFRelation 依赖于相关对象(用户)。

    该额外要求排除了 PFQueryTableVC,因为它假定您的表可以在单个查询中获取,但您的表取决于获取这两个关系列。

    这将迫使您使用具有UITableView 作为其视图子视图的普通旧UIViewController 滚动您自己。 (注意我不推荐UITableViewController 在这里...就像PFQueryTableVC 一样,它通常会产生更多的努力而不是方便,尽管你可能会在这里侥幸逃脱)。

    如何做到这一点的要点是:依次查询游戏表,然后是whoseTurn关系,然后是players关系。有了这些数据,您就可以将找到的游戏分成三个数组,与您的表格视图部分完全对应:gamesThatAreOvergamesThatAreUsersTurngamesThatAreOtherUsersTurn

    您可以将这些数组放在另一个数组中,称为model。告诉您的表视图您有self.model.count 部分(将始终为==3),并且索引路径中的行数为self.model[indexPath.section].count

    您在索引路径中的对象版本会给您一个游戏,看起来像这样:self.model[indexPath.section][indexPath.row];

    PS - 我认为将自己从 parse 提供的类的“便利”(又名约束)中解脱出来无论如何都会是一个净积极因素。

    【讨论】:

    • 非常感谢您快速详细的回答!现在,我可以不只使用 PFQTVC 并在 objectsDidLoad 方法中获取这些关系,然后在那里创建我的数组,还是按照您建议的方式使用我自己的 ViewController 更容易?
    • 我在回答之前很快就调查了。我想不是。 queryForTable 方法希望返回一个 PFQuery。超类执行该查询,然后调用 objectsDidLoad。有一些机会你可以在那里执行关系查询,但在我看来,整个事情都已连接到那时同步运行
    • 但我想你可以试试。诀窍是不要崩溃,因为当 objectsDidLoad 触发时,super 认为你已经完成了加载。对我来说,当我发现自己不得不在超级上玩花样时,是时候离开超级了。
    • 我知道我过去曾在 objectsDidLoad 中执行过查询,它确实会稍微减慢加载速度,但它确实有效。我过去所做的查询涉及查询另一个类,其中指针等于 self.objects 中的对象,但这不适用于在 tableview 中创建部分。所以,无论哪种方式,看起来我需要将我的 3 个部分分成 3 个不同的数组,是吗?由于我过去非常依赖 PFQTVC,我将在我自己的 VC 中的哪里执行查询?在 viewDidLoad 中?
    • 是的,当然,要支持包含您想要数组数组的部分的表。外部数组表示部分,内部表示每个部分的行。我没有考虑在 objectsDidLoad 中同步运行关系查询。这将消除我对与超类不同步的所有担忧(但我从不这样做,因为我从不同步执行网络任务。如果您可以在这些调用期间忍受小 UI 冻结,那么您可能很好,但它不被认为是好的风格)。
    猜你喜欢
    • 1970-01-01
    • 2014-03-12
    • 2017-04-29
    • 2013-02-15
    • 1970-01-01
    • 2018-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多