カスタムセルを含むtableViewを含む今日の拡張機能を作成し、このテーブルにサーバーからのデータを入力しました。データを更新するために Web サービスが呼び出され、テーブル データを再ロードする必要がある場合は常に、テーブルのデータが消えます。つまり、今日のパネルから通知パネルに切り替えて戻るたびに、テーブルのデータがなくなります。以下は私のコントローラーのコードです。
TodayViewController.swift:
import UIKit
import NotificationCenter
class TodayViewController: UIViewController, NCWidgetProviding, UITableViewDataSource, UITableViewDelegate {
@IBOutlet weak var tableView: UITableView!
var key : [String]=[String]()
var value: [String]=[String]()
func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
return UITableViewAutomaticDimension
}
override func viewDidLoad() {
super.viewDidLoad()
dispatch_async(dispatch_get_main_queue(), { () -> Void in
print("This is run on the main queue, after the previous code in outer block")
self.callUrl()
self.tableView.reloadData()
})
}
func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 1
}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
print(key.count)
return key.count
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell=self.tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as!CustomCell
cell.key.text=key[indexPath.row]
cell.value.text=value[indexPath.row]
cell.setNeedsLayout()
return cell
}
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
}
func callUrl(){
let requestURL: NSURL = NSURL(string: "http://www.learnswiftonline.com/Samples/subway.json")!
let urlRequest: NSMutableURLRequest = NSMutableURLRequest(URL: requestURL)
let session = NSURLSession.sharedSession()
let task = session.dataTaskWithRequest(urlRequest) {
(data, response, error) -> Void in
let httpResponse = response as! NSHTTPURLResponse
let statusCode = httpResponse.statusCode
if (statusCode == 200) {
print("Everyone is fine, file downloaded successfully.")
self.key.removeAll()
self.value.removeAll()
do{
let json = try NSJSONSerialization.JSONObjectWithData(data!, options:.AllowFragments)
if let stations = json["stations"] as? [[String: AnyObject]] {
for station in stations {
if let name = station["stationName"] as? String {
if let year = station["buildYear"] as? String {
self.key.append(name)
self.value.append(year)
print(self.key)
}
}
}
}
}
catch {
print("Error with Json: \(error)")
}
}
}
task.resume()
}
func widgetPerformUpdateWithCompletionHandler(completionHandler: ((NCUpdateResult) -> Void)) {
dispatch_async(dispatch_get_main_queue(), { () -> Void in
self.callUrl()
self.tableView.reloadData()
})
completionHandler(NCUpdateResult.NewData)
}
}
データを含むテーブル:
データのないテーブル:
私はiosとswiftが初めてです。どんな助けでも素晴らしいでしょう!ありがとう。