У меня есть табличное представление в приложении чата, которое содержит пользователей, которые вошли в приложение. Это приложение находится в Swift, и представление таблицы встроено в контроллер навигации. Я также использую Parse.Table View Cell Reloading Issue
Когда я нажимаю на пользователя, он отправляет меня на экран чата, который он должен делать. Затем, когда я нажимаю кнопку «Назад», она возвращает меня к представлению таблицы «Пользователь», как должно, но что-то странное происходит. Он имеет пользователей, которые вошли в систему, но показывает их дважды. Например, если User1 входит в приложение, я нажимаю на него в чате, а затем возвращаюсь к представлению таблицы, теперь он отображает User1 дважды. Если я повторю этот процесс, он будет показывать User1 три раза. Надеюсь, кто-то может помочь ...
Переменные:
import UIKit
// Global Variable
var userName = ""
class usersVC: UIViewController, UITableViewDataSource, UITableViewDelegate {
@IBOutlet weak var resultsTable: UITableView!
var resultsUsernameArray = [String]()
var resultsProfileNameArray = [String]()
var resultsImageFile = [PFFile]()
override func viewDidLoad() {
super.viewDidLoad()
let theWidth = view.frame.size.width
let theHeight = view.frame.size.height
resultsTable.frame = CGRectMake(0, 0, theWidth, theHeight-64)
// PFUser.currentUser().username is part of Parse framework
userName = PFUser.currentUser()!.username!
}
Тогда вот viewDidAppear, где я считаю, это вопрос:
override func viewDidAppear(animated: Bool) {
let predicate = NSPredicate(format: "username != '"+userName+"'")
var query = PFQuery(className: "_User", predicate: predicate)
var theObjects = query.findObjects()
for object in theObjects! {
// object.username is the name of the username class in Parse, as well as "profileName" and "photo"
self.resultsUsernameArray.append(object["username"] as! String)
self.resultsProfileNameArray.append(object["profileName"] as! String)
self.resultsImageFile.append(object["photo"] as! PFFile)
self.resultsTable.reloadData()
}
}
Не уверен, если это необходимо, но это были некоторые из те же переменные и сделок с таблицей:
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
var cell : ResultsCell = tableView.dequeueReusableCellWithIdentifier("Cell") as! ResultsCell
cell.usernameLbl.text = self.resultsUsernameArray[indexPath.row]
cell.usernameLbl.hidden = true
cell.profileNameLbl.text = self.resultsProfileNameArray[indexPath.row]
resultsImageFile[indexPath.row].getDataInBackgroundWithBlock {
(imageData: NSData?, error: NSError?) -> Void in
if error == nil {
let image = UIImage(data: imageData!)
cell.profileImg.image = image
}
}
return cell
}
Сообщите мне, если вам нужен больше кода!
Спасибо, Джек
Почему у вас есть этот код в viewDidAppear? Почему бы не поместить его в viewDidLoad, где он будет работать только один раз? – rdelmar
Я смотрел видео, и они предложили это. Я попробую положить его в viewDidLoad и посмотреть, что произойдет. – JackB03
Это сработало! И быстро появился. Еще раз спасибо rdelmar !! – JackB03