【问题标题】:PFQuery returns Empty ArrayPFQuery 返回空数组
【发布时间】:2017-02-27 09:04:20
【问题描述】:

我一直在向解析服务器添加信息,问题是我似乎无法通过 PFQuery 获得所需的字符串。

如果我打印对象,它会返回一个空数组。另外(fahrtenRequests.count = 0)。有人建议这是因为 PFQuery 无法读取我的数据或我的数据格式不正确。

我完全迷失在这里,似乎一切都应该正常工作,但没有

提前感谢您的帮助:) :)

我的代码:

import UIKit
import Parse

class HistoryViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {

var zeit: Array = [String]()
var kosten:Array = [String]()
var kilometer: Array = [String]()
var datum: Array = [String]()


@IBOutlet weak var tableView: UITableView!

override func viewDidLoad() {
super.viewDidLoad()

self.tableView.delegate = self

tableView.register(UINib(nibName: "CellHistoryViewControllerTableViewCell", bundle: nil), forCellReuseIdentifier: "CellHistory")


let query = PFQuery(className: "GemachteFahrten")

query.whereKey("gefahreneZeit", equalTo: (PFUser.current()?.objectId!)!)

query.whereKey("kosten", equalTo: (PFUser.current()?.objectId!)!)

query.whereKey("createdAt", equalTo: (PFUser.current()?.objectId!)!)

query.whereKey("gefahreneKilometer", equalTo: (PFUser.current()?.objectId!)!)


query.findObjectsInBackground { (objects, error) in

    if error != nil {

        print("error finding user data")


    } else {

        print("check2")

        print(objects!)

        if let fahrtenRequests = objects {


            print(fahrtenRequests.count)

再次感谢您的帮助:)

【问题讨论】:

  • 我认为您无法使用“CreatedAt”触发对用户对象 ID 的查询。我的意思是这似乎无效:query.whereKey("createdAt", equalTo: (PFUser.current()?.objectId!)!)
  • @Satish Mavani 你说得对,谢谢 :) 它的类型是 Date,但其余的都应该是字符串
  • 您的问题现在解决了吗?
  • @Satish Mavani 不幸的是,没有,仍在尝试解决为什么其他字符串没有添加到数组中,因为两者都应该是字符串类型,并且它确实在类似的以前的应用程序中工作:/ 因为我正在制作一个出租车应用程序,它保存数据以解析我也试图实现一个历史视图,其中所有以前的行程都显示在一个 tableView 中:)

标签: ios arrays swift parse-platform pfquery


【解决方案1】:

如何将所有列的值与用户的对象 id 进行比较?

比较将导致 null,尝试使用适当的值。 此外,您不应查询createdAt 参数,其类型为Date。 还要检查适当的数据类型。

【讨论】:

  • 我正在比较,所以它会从“kosten”或“gefahreneZeit”中取出正确的字符串,它应该等于objectId。还是我做错了?我按照建议尝试了这个:query.whereKey("gefahreneKilometer", equalTo: "objectId") 但这不起作用
【解决方案2】:

不,PFQuery 不是这样工作的。 equalTo: 之后的对象必须与 Parse 仪表板中 key:@"..." 下的对象类型相同。

例如,在您的情况下,如果您想检索一个用户进行的所有旅行,您需要先将该用户保存为指向 User 类的指针:(在您的解析仪表板中,选择 Edit->Add a Column ,然后选择Pointer作为类型,User作为目标类)

let trip = PFObject(className:"GemachteFahrten");
//save the user who made this trip
trip["user"] = PFUser.current()
//save other things like costs, distance...etc
trip["kosten"] = ...
trip["gefahreneKilometer"] = ...
trip.saveInBackground()

然后,我们要获取属于当前用户的所有行程:

let query = PFQuery(className: "GemachteFahrten")
query.whereKey("user", equalTo: PFUser.current())
//then execute the query

请参阅 Parse 文档http://parseplatform.github.io/docs/ios/guide/#queries

【讨论】:

  • 感谢您的帮助...不幸的是,我没有在寻找具体的旅行、费用等,因为我事先不知道我在寻找什么确切的价值,我现在是字符串类型的(至少我保存了像这样)。我从 Parse 文档中尝试了很多组合,但到目前为止都没有工作:/
  • 如果完成了,这难道不是吗? equalTo: 之后的对象与键“”下的对象具有相同的类型,它们是字符串,我想将其添加到字符串数组中。我只是认为我必须将 equalTo: 设置为 objectId,然后为整个行程采用正确的值“成本”
  • @StefanoChiabotti 嗨,您是否要检索所有行程?因为我仍然对你想要达到的目标有点困惑:/
  • @StefanoChiabotti 哦,我明白了,您是否要获取 key 的值...?例如旅行的费用?
  • 您好,感谢您的快速响应。我正在制作一个出租车应用程序,它可以在旅行后保存解析数据,而我试图实现的是一个历史视图,其中所有以前的旅行都在其中。是的,就是这样(我猜)。我认为id必须定义y轴(在这种情况下是equalTo:(objectId))和x轴(在这种情况下whereKey:“”)至少我在脑海中想象它是这样的:P也许我完全错了
猜你喜欢
  • 1970-01-01
  • 2017-08-30
  • 1970-01-01
  • 1970-01-01
  • 2017-07-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多