SwiftでiOS用のウィジェットを構築しています。主なアプリケーションの目的は、URLニュースフィードに接続して最新のニュースを取得することです。ウィジェットは、TodayビューのtableViewに表示するタイトルのみを取得します。Jsonデータがテーブルビューに表示されない
ウィジェットのデータを取得するためにこのメソッドを書いたのですが、何らかの理由で何も表示されません。私はそれをデバッグしようとしましたが、実際に不可能に見えるウィジェットです。
これは、フィードに接続してデータを抽出しようとするcellForRowAtです。面白い部分は、メインアプリは基本的に同じコードを使用し、それは完全に動作します。
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath)
let urlRequest = URLRequest(url: URL(string: "https://newsapi.org/v1/articles?source=techcrunch&sortBy=top&apiKey=c64849bc30eb484fb820b80a136c9b0a")!)
let task = URLSession.shared.dataTask(with: urlRequest) { (data,response,error) in
do{
let json = try JSONSerialization.jsonObject(with: data!, options: .mutableContainers) as! [String: AnyObject]
if let articlesFromJson = json["articles"] as? [[String: AnyObject]] {
if !(error != nil) {
var resultArray: NSMutableArray = NSMutableArray()
for articlesFromJson in articlesFromJson {
if let title = articlesFromJson["title"] as? String{
resultArray.add(title)
}
let array:NSArray = resultArray.reverseObjectEnumerator().allObjects as NSArray
resultArray = array as! NSMutableArray
let title:String = resultArray.object(at: indexPath.row) as! String
cell.textLabel?.text = title
}
}
}
//reload on main thread to speed it up
DispatchQueue.main.async {
self.tableView.reloadData()
}
} catch let error {
print(error)
}
}
task.resume()
return cell
}
誰かが、それは大きな助けになるミスがi've今日間、この問題に貼付されて、ここで私が把握することができます。ありがとう
スウィフトであなたのObjective-Cの習慣を複製しようとしないでください。たとえば、NSArray/NSMutableArray/NSDictionary/NSMutableDictionaryを使用せず、代わりにSwiftコレクションを使用してください。また、強制アンラッピングと強制キャストは避けてください。最後の提案:テーブルビュー内でネットワークやパースをしないでください。 tableViewは、ダウンロードして解析している別のクラスの準備済みコンテンツを使用します。 – Moritz
ありがとう、私はジャスティンのような別の方法ですべてのネットワーキングを以下に提案しました。NSMutableArraysの代わりにコレクションを使用します。 – MrRobot0150