简体   繁体   English

查询解析数组数据到本地数组,然后添加到TableView(Swift)

[英]Query Parse Array Data down into local array, and add to TableView (Swift)

Hi first i'd like to say (Thank you) in advance. 嗨,首先,我想先说(谢谢)。 I apologize as I feel like a huge idiot. 我道歉,因为我觉得自己是个白痴。

So I've successfully pulled an array of objectId's from parse and added it to a local array called [teamArray] See below: 因此,我已经成功地从解析中提取了一个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!)")
        }
    }
}

The team array is like so: 团队数组如下所示:

var teamArray:NSMutableArray = []

So, my goal is to take each object in the array, and add it into into the tableView cells. 因此,我的目标是获取数组中的每个对象,并将其添加到tableView单元格中。

I have no idea how to do this. 我不知道该怎么做。 I'll re-iterate. 我再重申一次。

  1. I want to pull down the parse array which is an array of objectId's (as Strings) 我想下拉解析数组,它是一个objectId(作为字符串)的数组

  2. I want to extract each ObjectId within the [teamArray], and add that object into it's own cell. 我想提取[teamArray]中的每个ObjectId,并将该对象添加到它自己的单元格中。

  3. Pull the data out of that object. 将数据拉出该对象。

    • profile photo 头像照片
    • name 名称
    • location 位置
    • age 年龄
    • gender 性别

Now how do I approach this??? 现在我该如何处理???

This example that I am about to show you is for iOS 9 with the new parse SDK . 我将向您展示的这个示例适用于带有新的parse SDK的iOS 9

You want to display a lot of information in your TableViewCell, so create a model for example struct which contains all those informations. 您希望在TableViewCell中显示很多信息,因此包含所有这些信息的示例struct创建一个模型。

struct PersonalInfo
{
    var profilePhoto:UIImage!
    var name:String!
    var location:CLLocationCoordinate2D!
    var age:Int!
    var gender:String!
}
  • Put this structure outside of the ViewController class 将此结构放在ViewController类之外

Then instead of having an array of NSMutableArray array just create an var arrayOfData = [PersonalInfo]() 然后,不用创建一个NSMutableArray数组,而只需创建一个var arrayOfData = [PersonalInfo]()

  • Your query will now look like: 您的查询现在看起来像:

     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 } } }) } } } }) } 
    • Then in you cellForRowAtIndexPath method you will have something like: var data = arrayOfData[indexPath.row] cell.textLabel.text = data.name // <---- access everything from the array using the . 然后,在cellForRowAtIndexPath方法中,您将得到类似:var data = arrayOfData [indexPath.row] cell.textLabel.text = data.name // <----使用来访问数组中的所有内容 method from data 数据方法

The question needs a little more clarification. 这个问题需要更多澄清。 First of all, is object["team"] returning an array? 首先,object [“ team”]返回一个数组吗? or is it representing one single object? 还是代表一个单一的对象? Another option going off on the answer above is to use PFSubclassing to represent your results as parse objects It could look something like this: 上面答案的另一个选择是使用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()
        }
      }
}

This way you can perform all of the PFObject operations on your objects Eg. 这样,您可以在对象Eg上执行所有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()

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM