【问题标题】:Query Parse Array Data down into local array, and add to TableView (Swift)查询解析数组数据到本地数组,并添加到 TableView (Swift)
【发布时间】:2015-09-20 01:20:53
【问题描述】:

首先,我想提前说声(谢谢)。我很抱歉,因为我觉得自己像个大白痴。

所以我已经成功地从解析中提取了一个 objectId 数组并将其添加到一个名为 [teamArray] 的本地数组中,如下所示:

func getTeamData() {
    var query = PFUser.query()
    query?.whereKey("objectId", equalTo: displayedTeamId)
          query!.findObjectsInBackgroundWithBlock {
        (objects: [AnyObject]?, error: NSError?) -> Void in
        if error == nil {
            // The find succeeded.
            println("Successfully retrieved \(self.displayedTeamId)")
            // Do something with the found objects
            if let objects = objects as? [PFObject] {
                for object in objects {
                    var team:AnyObject? = object["team"]
                    self.teamArray.addObjectsFromArray(team as! [PFObject])
        --> successful print here: println(" I have a full \(self.teamArray)")
                    // code to download an image
                    let imageFile = object["teamImage"] as! PFFile

                    imageFile.getDataInBackgroundWithBlock {

                        (imageData: NSData?, error: NSError?) -> Void in
                        if error != nil {
                            println(error)
                        } else {

                            if let data = imageData {
                                self.showTeamImage.image = UIImage(data: data)
                                self.tableView.reloadData()
                            }
                        }

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

团队数组是这样的:

var teamArray:NSMutableArray = []

所以,我的目标是获取数组中的每个对象,并将其添加到 tableView 单元格中。

我不知道该怎么做。我会重复一遍。

  1. 我想下拉解析数组,它是一个objectId的数组(作为字符串)

  2. 我想提取 [teamArray] 中的每个 ObjectId,并将该对象添加到它自己的单元格中。

  3. 从该对象中提取数据。

    • 个人资料照片
    • 姓名
    • 位置
    • 年龄
    • 性别

现在我该如何处理???

【问题讨论】:

    标签: arrays swift parse-platform


    【解决方案1】:

    我即将向您展示的这个示例适用于带有新解析 SDK 的 iOS 9

    您想在 TableViewCell 中显示大量信息,因此创建一个模型例如 struct,其中包含所有这些信息。

    struct PersonalInfo
    {
        var profilePhoto:UIImage!
        var name:String!
        var location:CLLocationCoordinate2D!
        var age:Int!
        var gender:String!
    }
    
    • 将此结构放在 ViewController 类之外

    然后创建一个NSMutableArray 数组而不是NSMutableArray 数组,而只是创建一个var arrayOfData = [PersonalInfo]()

    • 您的查询现在将如下所示:

      func getTeamData()
      {
      var query = PFUser.query()
      query?.whereKey("objectId", equalTo: displayedTeamId)
      query?.findObjectsInBackgroundWithBlock({ (objects:[PFObject]?, error :NSError?) -> Void in
          if error == nil
          {
              if let objects = objects
              {
                  for one in objects
                  {
      
                      let imageToRetreive = one["imageFromParse"] as! PFFile
                      imageToRetreive.getDataInBackgroundWithBlock({ (data :NSData?, error:NSError?) -> Void in
                          if error == nil
                          {
                              if let data = data
                              {
                                let finalImage = UIImage(data: data)
                                  let name = one["username"] as! String
                                  let gender = one["gender"]  as! String
                                  let age = one["age"] as! Int
                                  let location = one["Location"] as! PFGeoPoint
      
                                  var Info = PersonalInfo()  
      
                                  Info.name = name
                                  Info.gender = gender
                                  Info.age = age
                                  Info.profilePhoto = finalImage
                                  Info.location = CLLocationCoordinate2DMake(location.latitude, location.longitude)
      
                                  self.arrayOfData.append(Info)
                                  // <--- then reload the tableview
      
                              }
      
                          }
                      })
                  }
              }
          }
        })
       }
      
      • 然后在您的 cellForRowAtIndexPath 方法中,您将拥有类似的内容: var data = arrayOfData[indexPath.row] cell.textLabel.text = data.name // . 方法从数据中访问数组中的所有内容

    【讨论】:

    • 感谢您的反馈。但我有点害怕改变任何东西,因为我是一个使用 swift 的新开发人员。
    • object["team"] 是解析中与 PFUser 相关的 ObjectId 的数组。一旦创建,每个 PFUser 都将拥有自己的数组。我正在尝试做的是删除这些 objectId 中的每一个并从它们中获取数据。
    【解决方案2】:

    这个问题需要进一步澄清。首先,object["team"] 返回一个数组吗?还是它代表一个单一的对象? 上面答案的另一个选择是使用 PFSubclassing 将结果表示为解析对象 它可能看起来像这样:

    class Team: PFObject, PFSubclassing {
        @NSManaged var profilePhoto: PFFile?
        @NSManaged var name: String
    
        // The name of your class in parse
        static func parseClassName() -> String {
            return "Team"
          }
    
        override class func initialize() {
            struct Static {
              static var onceToken : dispatch_once_t = 0;
            }
            dispatch_once(&Static.onceToken) {
              self.registerSubclass()
            }
          }
    }
    

    这样您就可以对您的对象执行所有 PFObject 操作 例如。

    let team = Team()
    team.name = "Team name here"
    
    let imageNamed = UIImage(named: "image.jpg")
    let imageData = UIImageJPEGRepresentation(imageNamed, 1)
    let imageFile = PFFile(data: imageData)
    team.profileImage = imageFile
    team.saveInBackground()
    

    【讨论】:

    • 明天我会就此事与您联系,我无法立即访问,但会尝试一些事情。谢谢!
    猜你喜欢
    • 2020-04-07
    • 1970-01-01
    • 2016-07-11
    • 1970-01-01
    • 1970-01-01
    • 2023-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多