【发布时间】:2016-02-09 21:47:10
【问题描述】:
我想列出当前用户所有喜欢的 ServiceProviders。一切正常,除了表格视图:它复制了最后一个对象。
有一个类Favorite:objectId、User(指向User的指针)、ServiceProvider(指向ServiceProvider的指针)。
func baseQuery() -> PFQuery {
let favoriteQuery = PFQuery(className: "Favorite")
favoriteQuery.whereKey("favoriteUser", equalTo:PFUser.currentUser()!)
favoriteQuery.includeKey("favoriteServiceProvider")
favoriteQuery.orderByDescending("createdAt")
return favoriteQuery
}
override func queryForTable() -> PFQuery {
return self.baseQuery().fromLocalDatastore()
}
override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 1
}
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return objects!.count
}
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath, object: PFObject?) -> PFTableViewCell {
var cell = tableView.dequeueReusableCellWithIdentifier("favoriteCell") as! FavoriteTableViewCell!
if cell == nil {
cell = FavoriteTableViewCell(style: UITableViewCellStyle.Default, reuseIdentifier: "favoriteCell")
}
print("Founded \(objects!.count) favorite(s) from subquery")
//print(objects)
for object in objects! {
if let favoriteServiceProvider = object["favoriteServiceProvider"] as? PFObject {
let varspName = favoriteServiceProvider["spName"] as? String
print("spName: \(varspName)")
cell.labelspName.text = varspName
let varspCity = favoriteServiceProvider["spCity"] as? String
print("spCity: \(varspCity)")
cell.labelspCity.text = varspCity
let pictureUser: PFFile = (favoriteServiceProvider["spUserPhoto"] as? PFFile)!
print("spServiceProviderPhoto: \(pictureUser)")
pictureUser.getDataInBackgroundWithBlock { (data: NSData?, err: NSError?) -> Void in
if data != nil{
//Rounded spPhoto
cell.imageViewUserPhoto.image = UIImage(data: data!)
cell.imageViewUserPhoto.layer.cornerRadius = cell.imageViewUserPhoto.frame.size.width / 2
cell.imageViewUserPhoto.clipsToBounds = true
cell.imageViewUserPhoto.layer.borderColor = UIColor.lightGrayColor().CGColor
cell.imageViewUserPhoto.layer.borderWidth = 2
}
}
let varRating = favoriteServiceProvider["spAverageRating"] as? Int
print("spAverageRating: \(varRating)")
cell.ratingControl.rating = varRating!
}
}
return cell
}
我可以找到 2 个收藏夹,没关系!
并且可以正确看到“打印”。
spName: Optional("Service Provider Name")
spCity: Optional("Florianópolis / SC")
spServiceProviderPhoto: <PFFile: 0x12fde9de0>
spAverageRating: Optional(5)
spName: Optional("Service Provider Name 2")
spCity: Optional("Florianópolis / SC")
spServiceProviderPhoto: <PFFile: 0x12ff7ca60>
spAverageRating: Optional(4)
一切看起来都很好,但是……应用程序只重复最后一个对象(显示两次相同的对象)。怎么了?
【问题讨论】:
-
为什么每次创建单元格时都要遍历整个
objects?也许这就是为什么你每次都得到相同的单元格的原因,因为它们最后都得到相同的object。您肯定需要一些if语句来为当前单元格选择正确的数据。
标签: swift pointers tableview relation pfquery