Я создаю табличное представление, которое отслеживает первые 20 твитов из нескольких учетных записей и отображает их в хронологическом порядке. Он обращается к API Twitter, а затем просматривает твиты и добавляет их в табличное представление. Моя проблема в том, что когда я пытаюсь обновить sh данные в табличном представлении, ничего не происходит. Я пытаюсь снова вызвать getTwitterInfo (), но он ничего не делает, даже если есть новые твиты, которые нужно показать. Я перепробовал все, что мог найти в Интернете, но, похоже, ничего не помогает. Любая помощь будет принята с благодарностью - вот код моего контроллера представления.
class TwitterViewController: UIViewController {
var tableView = UITableView()
var tweets = [Tweet]()
let cellID = "cellID"
var accounts: [String:String] = [
//this is just a dictionary of the accounts I'm monitoring and their corresponding profile picture
]
override func viewDidLoad() {
super.viewDidLoad()
navigationController?.setNavigationBarHidden(true, animated: false)
configureTableView()
getTwitterInfo()
}
func configureTableView(){
view.addSubview(tableView)
tableView.delegate = self
tableView.dataSource = self
tableView.rowHeight = UITableView.automaticDimension
tableView.estimatedRowHeight = 150
tableView.register(TweetCell.self, forCellReuseIdentifier: cellID)
tableView.translatesAutoresizingMaskIntoConstraints = false
tableView.topAnchor.constraint(equalTo: view.topAnchor).isActive = true
tableView.leftAnchor.constraint(equalTo: view.leftAnchor).isActive = true
tableView.rightAnchor.constraint(equalTo: view.rightAnchor).isActive = true
tableView.bottomAnchor.constraint(equalTo: view.bottomAnchor).isActive = true
}
func getTwitterInfo(){
print("getting new info...")
tweets = [Tweet]()
var counter = 1
for (name, pfpLink) in accounts{
let imageURL = URL(string:pfpLink)!
var image = UIImage()
let imageDataTask = URLSession.shared.dataTask(with: imageURL) { (data,response,error) in
image = UIImage(data:data!)!
}
imageDataTask.resume()
let url = URL(string: "https://api.twitter.com/1.1/statuses/user_timeline.json?screen_name=\(name)&count=20&tweet_mode=extended")!
var request = URLRequest(url: url)
request.allHTTPHeaderFields = ["Authorization": Constants.bearer]
let dataTask = URLSession.shared.dataTask(with: request){ (data,response,error) in
do{
let data = try JSONSerialization.jsonObject(with: data!, options: []) as? [[String:Any]]
let _ = data!.map{
let htmlEncodedString = $0["full_text"] as! String
let message: String
if let newDict = $0["retweeted_status"] as? Dictionary<String,Any>{
let newEncodedString = newDict["full_text"] as! String
message = Constants.decodeTwitterString(newEncodedString)
}else{
message = Constants.decodeTwitterString(htmlEncodedString)
}
let userInfo = $0["user"] as! Dictionary<String,Any>
let screenName = userInfo["screen_name"] as! String
let username = userInfo["name"] as! String
let twitterID = userInfo["id_str"] as! String
let dateString = $0["created_at"] as! String
let tweet = Tweet(name: username, username: screenName, message: message, twitterID: twitterID, image:image, dateString: dateString)
self.tweets.append(tweet)
}
if (counter == self.accounts.keys.count) {
let formatter = DateFormatter()
formatter.dateFormat = "EE LLL dd HH:mm:ss Z yyyy"
self.tweets = self.tweets.sorted{
formatter.date(from: $0.dateString)! > formatter.date(from: $1.dateString)!
}
DispatchQueue.main.async{
self.tableView.reloadData()
}
}
counter += 1
}catch let err{
print(err)
}
}
dataTask.resume()
}
}
}
extension TwitterViewController: UITableViewDelegate, UITableViewDataSource {
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return tweets.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: cellID, for: indexPath) as! TweetCell
let tweet = tweets[indexPath.row]
cell.set(tweet:tweet)
cell.selectionStyle = .none
return cell
}
}