быстро другой текстовый вид URL - PullRequest
0 голосов
/ 22 февраля 2019

У меня есть таблица.
Каждая ячейка открывает новый ViewController и загружает файл .txt в текстовое представление из моего репозитория github.
Но теперь я хочу, чтобы каждая ячейка загружала отдельный файл .txt из того же репо.
Так же, как первая ячейка загружает first.txt, вторая загружает second.txt и так далее
это вообще возможно?
Это было бы как приложение для чтения новостей, где вы нажимаете на заголовок и можете прочитать статью.

Вот мой текущий код, который плох, но я новичок:(

override func viewDidLoad() {
    super.viewDidLoad()
    DispatchQueue.global().async {
        let content = self.downloadContent()
        DispatchQueue.main.async {
            self.myTextView.text = content
        }
    }

}

func downloadContent() -> String {
    var data : Data!
    data = try? Data(contentsOf: URL(string: "https://raw.githubusercontent.com/SiposPtr/umszkiapp/master/cikk2.txt")!)
    let data_str = String(data: data, encoding: .utf8)
    return data_str!
}

Я загружаю свои файлы в новое репозиторий github, чтобы вы могли увидеть все материалы: https://github.com/SiposPtr/stackoverflow

1 Ответ

0 голосов
/ 22 февраля 2019

Не могли бы вы проверить, работает ли это?

import UIKit

class TableViewController: UITableViewController {

var TableData: Array<String> = Array<String>()
var currentCell: String?
var selectedValue: String?
var numberOfFileToLoad: Int = 1

override func viewDidLoad() {
    super.viewDidLoad()
    get_data_from_url("https://raw.githubusercontent.com/SiposPtr/umszkiapp/master/cimek.json")
}

override func numberOfSections(in tableView: UITableView) -> Int {
    return 1
}

override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return TableData.count
}

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)

    cell.textLabel?.text = TableData[indexPath.row]
    cell.textLabel!.numberOfLines = 2;

    return cell
}

override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
    return 90.0;
}

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    selectedValue = TableData[indexPath.row]
    numberOfFileToLoad = indexPath.row + 1
}

func get_data_from_url(_ link:String)
{
    let url:URL = URL(string: link)!
    let session = URLSession.shared

    let request = NSMutableURLRequest(url: url)
    request.httpMethod = "GET"
    request.cachePolicy = NSURLRequest.CachePolicy.reloadIgnoringCacheData

    let task = session.dataTask(with: request as URLRequest, completionHandler: {
        (
        data, response, error) in

        guard let _:Data = data, let _:URLResponse = response  , error == nil else {

            return
        }

        self.extract_json(data!)

    })

    task.resume()
}

func extract_json(_ data: Data) {

    let json: Any?

    do
    {
        json = try JSONSerialization.jsonObject(with: data, options: [])
    }
    catch
    {
        return
    }

    guard let data_list = json as? NSArray else
    {
        return
    }

    if let hir_lista = json as? NSArray {
        for i in 0 ..< data_list.count
        {
            if let hir_obj = hir_lista[i] as? NSDictionary
            {
                if let cim_nev = hir_obj["cim"] as? String
                {
                    if let hir_code = hir_obj["datum"] as? String
                    {
                        TableData.append(cim_nev + "\n(" + hir_code + ")")
                    }
                }
            }
        }
    }
    DispatchQueue.main.async {
        self.tableView.reloadData()
    }
}

// ez működik, de a run utáni első cikknek üres a titléje és akk csúszik minden cím eggyel
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "gotoSentences"{
        let nextViewController = segue.destination as! HirNezetViewController
        nextViewController.title = selectedValue
        print(selectedValue)
        nextViewController.numberOfFileToLoad = numberOfFileToLoad
        print(numberOfFileToLoad)
    }
}

@IBAction func reloadButton(_ sender: Any) {
    let alert = UIAlertController(title: "A cikkeket újratöltöttem", message: "Kattints a gombra az eltüntetéshez", preferredStyle: .alert)

    let ok = UIAlertAction(title: "Rendben", style: .default, handler: { action in
    })
    alert.addAction(ok)
    get_data_from_url("https://raw.githubusercontent.com/SiposPtr/umszkiapp/master/cimek.json")
    tableView.reloadData()
}
}

import UIKit

class HirNezetViewController: UIViewController {

var data:String!
var content: String?
var numberOfFileToLoad: Int = 1

@IBOutlet weak var myTextView: UITextView!

override func viewDidLoad() {
    super.viewDidLoad()
    DispatchQueue.global().async {
        let content = self.downloadContent()
        DispatchQueue.main.async {
            self.myTextView.text = content
        }
    }
}

func downloadContent() -> String {
    var data : Data!
    data = try? Data(contentsOf: URL(string: "https://raw.githubusercontent.com/SiposPtr/umszkiapp/master/cikk\(String(numberOfFileToLoad)).txt")!)
    let data_str = String(data: data, encoding: .utf8)
    return data_str!
}
}

Storyboard

...