Swift Parse - локальное хранилище данных и отображение объектов в виде таблицы

Я строю и приложение, которое сохраняет объект в локальном хранилище данных с разбора. Затем я запускаю запрос, чтобы получить объекты, которые находятся в локальном хранилище данных, и он работает нормально. Тем не менее, я хотел бы получить объект и его содержимое и установить некоторые метки в ячейке табличного представления на основе элементов, которые хранятся в объекте локального анализа данных. например, я делаю объект с атрибутами, такими как "objectID", "name", "date", "location". то, что я хотел бы сделать, это иметь табличное представление на главном экране, которое отображает имя, дату, местоположение... и т. д. каждого элемента, который был сохранен в локальном хранилище данных в метках в каждой ячейке.

я знаю, что я сохраняю это правильно:

// 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)")
            }

и когда я запускаю запрос, я могу получить доступ к атрибутам, запустив 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!)")
        }
    }

потому что при выполнении запроса я получаю идентификатор объекта и имя, как и ожидалось.

Успешно восстановлено 2 маяка. Необязательный ("A3OROVAMIj") Необязательный (счастливый) Необязательный ("bbyqPZDg8W") Необязательный (дата тестирования)

то, что я хотел бы сделать, это захватить поле имени в локальном хранилище данных объекта разбора, и это будет имя метки на ячейке в контроллере табличного представления.

Я не знаю, как получить доступ к этой информации из объекта и правильно установить метку.

Кто-нибудь знает, как это возможно?

1 ответ

Решение

Это всегда хорошая идея, чтобы избежать указателя lol... так почему бы не сохранить идентификатор пользователя или имя пользователя с конкретным объектом... так что измените эту строку:

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

К

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

Ответ

Теперь давайте создадим структуру, которая содержит objectID и Name за пределами вашего класса контроллера.

struct Data
{
var Name:String!
var id:String!
}

затем внутри класса Controller объявите следующую строку кода глобально

 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)")
        }
    }

В таблице вид номера OfRowinSection()

return ArrayToPopulateCells.count

В ячейке ForRowAtIndexPath()

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

Вуаля это должно быть

Другие вопросы по тегам