Как распечатать данные выбранной ячейки в другом ViewController в Swift? - PullRequest
0 голосов
/ 02 мая 2018

Я не мог понять, как решить эту логическую проблему. Вот что мне нужно: В массиве у меня есть имена клиентов. И я печатаю эти имена в табличном представлении. При нажатии на имя клиента вы перенаправляетесь на другой viewController, который включает заказы выбранного клиента.

Проблема в том, что я должен хранить эти данные в основных данных. Таким образом, имена клиентов в массиве, а также заказы в массиве тоже. Но я не знаю, как назначить друг другу два разных массива.

В основном: когда имя клиента нажимается в tableView, оно должно перейти к следующему viewController, в котором есть заказы этого подключенного клиента.

Нужно ли что-то делать с дизайном базы данных или назначать клиентский массив для массивов заказов? Я действительно смущен.

Жду ваших предложений. Спасибо !!!

Ответы [ 2 ]

0 голосов
/ 02 мая 2018

Если я правильно понял. Просто сделайте следующее.

Например: - у вас есть Entity с именем OrderInfo и внутри него у вас есть четыре Attributes customerName, address, orderID и city .

Итак, вы просто используете массив ur с именем для перечисления вещей в tableView. Тогда логика проста, например, используя didSelectRowAt, вы можете получить выбранное имя. Передайте это имя следующему VC, как. Я буду использовать storyBoardID, чтобы сделать это [Вы также можете использовать свой способ, чтобы передать это].

Первый ВК:

     let objNextVC = self.storyboard?.instantiateViewController(withIdentifier: "NextVC") as! NextVC
    objNextVC.strName = your_selected_NameHere
    self.navigationController?.pushViewController(objNextVC, animated: true)

NextVC:

var strName:String = String()

Теперь здесь начинается логика, я предполагаю, что вы также сохранили то же имя в CoreData [имена, которые есть в массиве имен]. Если нет, я бы посоветовал вам сделать это, чтобы уменьшить дополнительные усилия с вашей стороны.

Теперь в NextVC просто получите строку имени из strName, объявленного сверху

и примените следующий код для получения данных.

CoreData Match и запрос выборки:

func update(){
    let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext

    let request = NSFetchRequest<NSFetchRequestResult>(entityName: "OrderInfo")
    do{
        let results = try context.fetch(request)

        if results.count > 0{
            for result in results as! [NSManagedObject]{
                if let name = result.value(forKey: "customerName") as? String{
                    if name == strName{
                        print(result)
                        let name = result.value(forKey: "customerName")
                        let address = result.value(forKey: "address")
                        let orderID = result.value(forKey: "orderID")
                        let city = result.value(forKey: "city")

                        //Use it the way you like
                        do{
                            try context.save()
                            self.navigationController?.popViewController(animated: true)
                        }
                        catch{
                        }
                    }
                }
            }
        }
    }
    catch{
    }
}

А если все в порядке и если данные есть. Вы получите желаемый результат.

Ура!

0 голосов
/ 02 мая 2018

Если я правильно понял вашу проблему, вам трудно связать каждого вашего клиента с соответствующим массивом заказов. Для этого у вас есть массив для customer, и вы создаете один словарь, ключом которого является имя клиента, а значением - orderArray. Поэтому, если вы нажмете на какого-нибудь клиента в табличном представлении, вы получите соответствующий массив заказов из словаря, который вы можете передать следующему контроллеру представления.

...