Добавить параметр json в DIctionary From Tableview - PullRequest
0 голосов
/ 14 ноября 2018

Это мои необработанные данные JSON;

{
"participants":[

    {
        "name":"Ram",
        "mobile_no":"912368790",
        "events":[6,7,8,9,10],
        "gender":"male",
        "whatsapp_no":"912368790"
    },

    {
        "name":"Sham",
        "mobile_no":"9909123456",
        "events":[9,10],
        "gender":"male",
        "whatsapp_no":"9909123456"
    }

 ]
}

Это мой пользовательский интерфейс Я вставил одну ячейку, нажимая кнопку Добавить еще, как показано на скриншоте. когда я помещаю данные в текстовое поле, нажимаю кнопку «Отправить» и вызываю API. Я получаю ответ.

Но моя проблема в том, что я получаю ответ от Индивидуального 2, Индивидуального 3, Индивидуального 4 ... в другом массиве словаря. Я не могу добавить отдельные 2, отдельные 3, отдельные 4 ... в один массив, как показано в необработанных данных JSON.

Я новичок в Swift, может ли кто-нибудь помочь мне, как обрабатывать необработанные данные JSON с UITableView.

Это мой код

class ViewController: UIViewController,UITableViewDataSource,UITableViewDelegate,UITextFieldDelegate {

    @IBOutlet weak var addmore: UIButton!
    var cells:Array<Any> = []
    var ar = ["Individual 1"]
    @IBOutlet weak var tableview: UITableView!

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

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

        let cell = tableview.dequeueReusableCell(withIdentifier: "cell") as! TableTVC
        cell.indivuallbl.text! = ar[indexPath.row ]

        return cell
    }

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

    @IBAction func deleterow(_ sender: Any) {

        let point = (sender as AnyObject).convert(CGPoint.zero, to: tableview)
        guard let indexPath = tableview.indexPathForRow(at: point) else {
            return
        }
        ar.remove(at: indexPath.row)
        print(ar.count)

        tableview.deleteRows(at: [indexPath], with:  .automatic)



    }


    override func viewDidLoad() {
        super.viewDidLoad()

        addmore.layer.cornerRadius = 5
        self.tableview.reloadData()
        let myCell:TableTVC = tableview.cellForRow(at: IndexPath(row: 0, section: 0))! as! TableTVC
        cells.insert(myCell, at: 0)

    }



    @IBAction func addmore(_ sender: Any) {

        print("abhi")
        ar.insert("Individual \(ar.count + 1 )", at: ar.count)
        print(ar.count)

        let myIndexPath = IndexPath(row: ar.count-1 , section: 0)

        tableview.insertRows(at: [myIndexPath], with: .bottom)

        let myCell:TableTVC = tableview.cellForRow(at: myIndexPath)! as! TableTVC

        cells.insert(myCell, at: ar.count - 1)
    }

    @IBAction func submitBtn(_ sender: Any) {

        NotificationCenter.default.post(name: .data, object: nil)
    }
}


    UItableviewcell

class TableTVC: UITableViewCell, UITextFieldDelegate {

    @IBOutlet weak var whatsappnotxt: UITextField!
    @IBOutlet weak var phonenotxt: UITextField!
    @IBOutlet weak var nametxt: UITextField!
    @IBOutlet weak var gendropDowntx: HADropDown!
    @IBOutlet weak var indivuallbl: UILabel!


    var item = [String: Any]()



    override func awakeFromNib() {
        super.awakeFromNib()


        NotificationCenter.default.addObserver(self, selector: #selector(datatable(notification:)), name: .data, object: nil)
    }





    @objc func datatable(notification: Notification){

        var pP: [String: AnyObject] =
            [
                "participants":[
                    [ ]
                    ] as AnyObject
        ]
        print(pP)

        self.item = [

            "name": "\(nametxt.text!)",
            "mobile_no": "\(phonenotxt.text!)",
            "events":[6,7,8,9],
            "gender":"male",
            "whatsapp_no":"\(whatsappnotxt.text!)"
        ]
        print(item)

        var existingItems = pP["participants"] as? [[String: Any]] ?? [[String: Any]]()
        print(existingItems)
        existingItems.append(item)
        pP["participants"] = existingItems as AnyObject

        guard let url = URL(string: "http://api.domain.com/individual/add") else { return }
        var request = URLRequest(url: url)
        request.httpMethod = "POST"
        request.addValue("application/json", forHTTPHeaderField: "Content-Type")
        request.addValue("Bearer \(token)", forHTTPHeaderField: "Authorization")
        request.addValue("application/json", forHTTPHeaderField: "Accept")
        guard let httpBody = try? JSONSerialization.data(withJSONObject: pP , options: []) else { return }
        request.httpBody = httpBody

        let session = URLSession.shared
        session.dataTask(with: request) { (data, response, error) in

            if let response = response {
                print(response)


            }

            if let data = data {
                do {
                    let json = try JSONSerialization.jsonObject(with: data, options: [])
                    print(json)

                    if let dictionary = json as? [String: AnyObject],
                        let name = dictionary["errors"]{
                        print("language name: \(name)")
                    }

                } catch {
                    print(error)
                }
            }

            }.resume()


    }

    override func setSelected(_ selected: Bool, animated: Bool) {
        super.setSelected(selected, animated: animated)

    }

}

extension Notification.Name{

    static let data = Notification.Name("data")

}

1 Ответ

0 голосов
/ 19 ноября 2018

Создайте свой объект, как это

Struct Participants: Decodable
{
let name : String?
let mobile_no : Int?
let events : [Int]?
let gender : String?
let whatsapp_no : Int?
}

var participants = [Participants]()


func parseData(){

        let jsonUrlString = "Your_Website_here"
        guard let url = URL(string: jsonUrlString) else { return }

        URLSession.shared.dataTask(with: url) {(data, response, err) in

            guard let data = data else { return }

            do {

                let decoder = JSONDecoder()
                participants = try decoder.decode([Participants].self, from: data)

                DispatchQueue.main.async {

                    self.tableView.reloadData()



                }


            } catch let jsonErr{
                print("error", jsonErr)
            }


            }.resume()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...