[英]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.
我再重申一次。
I want to pull down the parse array which is an array of objectId's (as Strings) 我想下拉解析数组,它是一个objectId(作为字符串)的数组
I want to extract each ObjectId within the [teamArray], and add that object into it's own cell. 我想提取[teamArray]中的每个ObjectId,并将该对象添加到它自己的单元格中。
Pull the data out of that object. 将数据拉出该对象。
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!
}
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 } } }) } } } }) }
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.