2015-04-18 6 views
2

У меня есть табличное представление в приложении чата, которое содержит пользователей, которые вошли в приложение. Это приложение находится в 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 

} 

Сообщите мне, если вам нужен больше кода!

Спасибо, Джек

+1

Почему у вас есть этот код в viewDidAppear? Почему бы не поместить его в viewDidLoad, где он будет работать только один раз? – rdelmar

+0

Я смотрел видео, и они предложили это. Я попробую положить его в viewDidLoad и посмотреть, что произойдет. – JackB03

+0

Это сработало! И быстро появился. Еще раз спасибо rdelmar !! – JackB03

ответ

1

Вы должны изменить свой viewDIdAppear() метод мало-мальски так, как это,

override func viewDidAppear(animated: Bool) { 
    let predicate = NSPredicate(format: "username != '"+userName+"'") 
    var query = PFQuery(className: "_User", predicate: predicate) 
    var theObjects = query.findObjects() 
    self.resultsUsernameArray.removeAll(keepCapacity: true) 
    self.resultsProfileNameArray.removeAll(keepCapacity: true) 
    self.resultsImageFile.removeAll(keepCapacity: true) 
    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() 

    } 
} 

НТН, Enjoy Coding !!

+0

Это тоже работает! Спасибо. Я заметил, что это занимает немного больше времени, чтобы показать, как это делается, по сравнению с тем, чтобы поместить его в viewDidLoad(). – JackB03