Swift 解析 - 本地数据存储和在表视图中显示对象

Swift Parse - local datastore and displaying objects in a tableview

我正在构建应用程序,通过解析将对象保存在本地数据存储区中。然后我 运行 一个查询来检索本地数据存储中的对象并且它工作正常。但是,我想获取对象及其中的内容,并根据存储在解析本地数据存储对象中的项目在 table 视图单元格中设置一些标签。例如,我创建了一个具有 "objectID"、"name"、"date"、"location" 等属性的对象。我想要做的是在主屏幕上有一个 table 视图,显示名称、日期、位置...等等。在每个单元格的标签中保存在本地数据存储中的每个项目。

我知道我保存正确:

// parse location object

    let parseLighthouse = PFObject(className: "ParseLighthouse")
    parseLighthouse.setObject(PFUser.currentUser()!, forKey: "User")
            parseLighthouse["Name"] = self.placeTitle.text
            parseLighthouse["Note"] = self.placeNote.text
            parseLighthouse["Locality"] = self.placeDisplay.text!
            parseLighthouse["Latt"] = self.map.region.center.latitude
            parseLighthouse["Longi"] = self.map.region.center.longitude
            parseLighthouse["LattDelta"] = 0.5
            parseLighthouse["LongiDelta"] = 0.5
            parseLighthouse["Date"] = dateInFormat
            parseLighthouse.pinInBackground()
            parseLighthouse.saveInBackgroundWithBlock { (success: Bool, error: NSError?) -> Void in
                println("Object has been saved. ID = \(parseLighthouse.objectId)")
            }

并且当我 运行 查询时,我能够通过 运行ning println(object.objectForKey("Name"))

访问属性
func performQuery() {
    let query = PFQuery(className: "ParseLighthouse")

    query.fromLocalDatastore()
    query.whereKey("User", equalTo: PFUser.currentUser()!)
    query.findObjectsInBackgroundWithBlock { (objects, error) -> Void in
        if error == nil {
            // The find succeeded.
            println("Successfully retrieved \(objects!.count) lighthouses.")
            // Do something with the found objects
            if let light = objects as? [PFObject] {
                for object in light {
                    println(object.objectId)
                    println(object.objectForKey("Name"))



                }
            }
        } else {
            // Log details of the failure
            println("Error: \(error!) \(error!.userInfo!)")
        }
    }

因为当 运行查询时,我按预期取回了对象 ID 和名称。

已成功取回 2 座灯塔。 可选("A3OROVAMIj") 可选(快乐) 可选("bbyqPZDg8W") 可选(日期测试)

我想做的是获取解析对象本地数据存储中的名称字段,这是 table 视图控制器中单元格上标签的名称。

我不知道如何从对象访问该信息,以及如何正确设置标签。

有谁知道这是怎么可能的?

避免指针始终是个好主意哈哈...所以为什么不使用特定对象保存用户标识或用户名.. 所以改变这一行:

 parseLighthouse.setObject(PFUser.currentUser()!, forKey: "User")

 parseLighthouse["username"] = PFUser.currentUser().username

回答

现在让我们在控制器 Class.

之外创建一个包含 objectID 和 Name 的结构
struct Data
{
var Name:String!
var id:String!
}

然后在Controller里面class,全局声明下面这行代码

 var ArrayToPopulateCells = [Data]()

那么您的查询函数将如下所示:

 func performQuery() {
    let query = PFQuery(className: "ParseLighthouse")

    query.fromLocalDatastore()
    query.whereKey("User", equalTo: PFUser.currentUser()!)
    query.findObjectsInBackgroundWithBlock { (objects, error) -> Void in
        if error == nil {
            // The find succeeded.
            print("Successfully retrieved \(objects!.count) lighthouses.")
            // Do something with the found objects
            if let light = objects as? [PFObject] {
                for object in light {
                    print(object.objectId)
                    print(object.objectForKey("Name"))
                    var singleData = Data()
                    singleData.id = object.objectId
                    singleData.Name = object["Name"] as! String

                    self.ArrayToPopulateCells.append(singleData)


                }
            }
        } else {
            // Log details of the failure
            print("Error: \(error!) \(error!.userInfo)")
        }
    }

tableView中的numberOfRowinSection()

return ArrayToPopulateCells.count

在cellForRowAtIndexPath()

       var data = ArrayToPopulateCells[indexPath.row]
       cell.textlabel.text = data.objectID
       cell.detailLabel.text = data.Name

VOila 应该是这样