2015-09-06 63 views
1

我正在构建和应用程序,它使用解析将对象保存在本地数据存储中。然后,我运行一个查询来检索本地数据存储中的对象,并且它工作正常。但是,我想抓取对象及其中的内容,并根据存储在解析本地数据存储对象中的项目在表视图单元中设置一些标签。例如,我使用“objectID”,“name”,“date”,“location”等属性创建对象。我想要做的是在主屏幕上显示一个表格视图,显示名称,日期,位置等。每个单元中标签中保存在本地数据存储中的每个项目的数量。Swift解析 - 本地数据存储和在桌面视图中显示对象

我知道,即时通讯正确保存它:

// 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( “名称”))来访问属性

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”) 可选(日期测试)

什么,我想这样做是解析对象的本地数据存储中抢名称字段,以及是表视图控制器中单元格上标签的名称。

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

没有人知道这是可能的吗?

+0

你有你的tableView准备好了吗?那么你可以开始访问解析数据并在其中显示数据?或者你问如何使用parse.com数据做tableView? –

+0

你是说你得到一个叫做“object”的对象,但它实际上是一个你正在使用的自定义类对象?你有没有尝试将它投射到实际的课程并以这种方式访问​​属性?在Objective C中,你可以像这样访问name属性:((PFUser *)object).name,尽管我不确定swift是什么。 –

+0

所以你查询功能是否正常工作,你应该想要获得这些信息,然后加载你的tableview中的所有单元格......对吗? – Lamar

回答

1

它总是一个好主意,以避免指针笑...那么,为什么不保存用户ID或用户名与特定对象.. 所以改变这一行:

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

TO

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

回答

现在我们来创建一个包含对象ID和th的结构e名称以外的控制器类。

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

TableView中numberOfRowinSection()

return ArrayToPopulateCells.count 

在的cellForRowAtIndexPath()

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

瞧这应该是它

+0

好吧,我按照您的指示行事,他们似乎没有问题,没有错误。但在表格视图中没有任何显示。我完全遵循了这些代码,并且没有任何内容。即时通讯不完全确定项目被添加到arrayToPopulateCells数组。有任何想法吗? – Bcavanaugh934

+0

你能更新你的代码吗 – Lamar

+0

你是否重新加载了桌面视图 – Lamar

相关问题