Я хочу перечислить всех любимых ServiceProviders от текущего пользователя. Все работает правильно, за исключением вида таблицы: его дублирование последнего объекта.Почему мой tableView повторяет последний объект? PFQuery с помощью указателя
Существует класс Favorite: objectId, 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)
Все выглядит, как будет хорошо, но ... приложение повторяет только последний объект (показаны два раза и тот же объект). Что не так?
Почему вы создаете целые «объекты» каждый раз, когда создаете свою ячейку? возможно, именно поэтому вы получаете такую же ячейку каждый раз, так как все они заканчиваются тем же самым последним «объектом». Вам определенно понадобится инструкция 'if', чтобы выбрать правильные данные для вашей текущей ячейки. – Breek