как вставить словарь списка свойств в табличное представление - PullRequest
0 голосов
/ 09 июня 2018

У меня есть проблема, с которой, возможно, кто-то может мне помочь.У меня есть файл списка свойств в виде словаря.Я хочу отобразить информацию из списка свойств в табличном представлении.Но я хочу, чтобы в таблице отображался только определенный раздел.

так выглядит мой список свойств

И, как я уже сказал, я хочу вставить толькоопределенная часть списка в таблицу.Например, я хочу, чтобы отображалась только информация элемента 2. Я хочу, чтобы часть пункта 2.1, пункт 2.2, пункт 2.3 отображалась в таблице.На данный момент я могу только просмотреть всю информацию без каких-либо фильтров, в табличном представлении отображаются все данные 1 и 3 *.

Это мой код

import UIKit

class PlcStaViewController: UIViewController, UITableViewDelegate,UITableViewDataSource {

    @IBOutlet weak var Serch: UITextField!
    @IBOutlet weak var StationTable: UITableView!

    let cellReuseId = "cell"
    var policeName:[String] = []
    var myRawData:[String:[String:[String:NSObject]]] = [:]
    override func viewDidLoad() {
        super.viewDidLoad()

        self.StationTable.register(UITableViewCell.self, forCellReuseIdentifier: cellReuseId)

        getData()
        StationTable.delegate = self
        StationTable.dataSource = self
    }

    fileprivate func getData ()
    {
        //get plist
        let myPlist = Bundle.main.path(forResource: "Property List", ofType: "plist")!
        let StationData = NSDictionary(contentsOfFile: myPlist)

        //get raw data
        myRawData = StationData as!Dictionary
        //print (myRawData)

        //get data from first key
        let Stations:[String:NSObject] = StationData as! Dictionary
        for singleName in Stations
        {
            //print(singleName.key)
            //policeName.append(singleName.key)

            let StatData:[String:[String:NSObject]] = singleName.value as! Dictionary
            for singelStat in StatData
            {
                //print (singelStat.key)
                policeName.append(singelStat.key)
            }

        }
    }

    @IBAction func SerchBtn(_ sender: UIButton) {
    }

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

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let myCell:UITableViewCell = (StationTable.dequeueReusableCell(withIdentifier: cellReuseId) as UITableViewCell?)!
        myCell.textLabel?.text = policeName[indexPath.row]


        return myCell
    }    
}

Кто-нибудь знает, как я могу это сделать?

1 Ответ

0 голосов
/ 09 июня 2018

Несколько быстрых вещей, которые нужно отметить, прежде чем мы найдем возможное решение ...

    let StationData = NSDictionary(contentsOfFile: myPlist)

    //get raw data
    myRawData = StationData as!Dictionary
    //print (myRawData)

    //get data from first key
    let Stations:[String:NSObject] = StationData as! Dictionary

Эти три строки можно сжать до

 let stationData = NSDictionary(contentsOfFile: myPlist) as? [String: Any]

Я бы порекомендовалиспользуя вместо этого защитное утверждение вместо принудительного развертывания с !.

guard let stationData = NSDictionary(contentsOfFile: myPlist) as? [String: Any] else {
   print("[DEBUG] - station data was not set")
   return 
}

Во-вторых, я не думаю, что списки свойств предназначены для использования в качестве хранилища данных.Лично у меня будет файл JSON с этой информацией, но это зависит от личных предпочтений.

Как только вы получите свой словарь из списка.То, что вы пытаетесь сделать, на самом деле очень просто.вместо того, чтобы перебирать весь словарь.Просто выберите часть, с которой вы хотите работать.

if let item2 = stationData["item 2"] as? [String: Any] {
    // process item 2
}

Вот код, который у меня есть на игровой площадке, которая работает:

guard let myPlist = Bundle.main.path(forResource: "Property List", ofType: "plist") else {
        print("[DEBUG] - myPlist not found")
        return
    }

    guard let stationData = NSDictionary(contentsOfFile: myPlist) as? [String: Any] else {
        print("[DEBUG] - station data not loaded")
        return
    }

    if let item2 = stationData["item 2"] as? [String: Any] {
        for (key, value) in item2 {
            print("\(key) \(value)")
        }
    } else {
        print("[DEBUG] - item 2 not loaded")
    }
...