0

これは、昨日の昨日の投稿からの私の質問のフォローアップです

解析を使用してローカル データストアにオブジェクトを正常に保存し、そのオブジェクトを配列に追加して格納しようとして、内容をテーブル ビューに表示できるようにしました。クエリは正常に実行されていますが、配列に何も追加されていないように見えるため、テーブル ビューには何も表示されません。これが私のコードです。

localData.swift ファイル

import Foundation

struct localData {
var date: String!
var latt: NSNumber!
var lattDelta: NSNumber!
var locality: String!
var longi: NSNumber!
var longiDelta: NSNumber!
var name: String!
var note: String!
}

次に、これをグローバルに宣言します。

var arrayToPopulateCells = [localData]()

これは私の解析クエリです:

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"))
//                        println(object.objectForKey("Locality"))
                    var singleData = localData()
                    singleData.name = object["Name"] as! String
                    singleData.note = object["Note"] as! String
                    singleData.date = object["Date"] as! String
                    singleData.latt = object["Latt"] as! NSNumber
                    singleData.longi = object["Longi"] as! NSNumber
                    singleData.lattDelta = object["LattDelta"] as! NSNumber
                    singleData.longiDelta = object["LongiDelta"] as! NSNumber
                    singleData.locality = object["Locality"] as! String


                    self.arrayToPopulateCells.append(singleData)



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

私のテーブルコードで:

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return arrayToPopulateCells.count
}

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {



//        var lighthouse = self.lighthouses[indexPath.row]
    var data = self.arrayToPopulateCells[indexPath.row]

    //setting the prototype cell to link with the identifier set in attributes earlier.
    let cell = tableView.dequeueReusableCellWithIdentifier("locationCell") as! lighthouseCell

    let row = indexPath.row
    cell.cellName.text = data.name
    cell.cellPlace.text = data.locality
//        cell.cellCoordinates.text = "\(lighthouse.latt)" + ", " + "\(lighthouse.longi)"
//        cell.cellNote.text = lighthouse.note
    cell.cellDate.text = "\(data.date)"



    return cell
}

何が間違っているのかわかりませんが、クエリは機能しているようですが、配列には何も入っていません。何か案は?

解析オブジェクトはviewcontroller #2で作成され、テーブルビューがあるviewcontroller #1でクエリが実行されることに注意してください。これは違いがありますか?同じコントローラーでオブジェクトが作成された直後に、クエリを実行して追加しようとする必要がありますか?

4

1 に答える 1

0

あなたの問題はあなたが電話する必要があることだと思います

self.tableView.reloadData()

for object in light {ループの外側

あなたのデータは配列に追加されていると思います.テーブルビューだけがいつ完了したかを知る必要があります.

編集***

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 {
                var singleData = localData()
                singleData.name = object["Name"] as! String
                singleData.note = object["Note"] as! String
                singleData.date = object["Date"] as! String
                singleData.latt = object["Latt"] as! NSNumber
                singleData.longi = object["Longi"] as! NSNumber
                singleData.lattDelta = object["LattDelta"] as! NSNumber
                singleData.longiDelta = object["LongiDelta"] as! NSNumber
                singleData.locality = object["Locality"] as! String
                self.arrayToPopulateCells.append(singleData)
            }
            self.tableView.reloadData()
        }
    } else {
        // Log details of the failure
        println("Error: \(error!) \(error!.userInfo!)")
    }
}
}
于 2015-09-07T16:38:20.290 に答える