Можно ли в Swift добавить значение UITableViewCell в массив строк? - PullRequest
0 голосов
/ 28 июня 2019

Я создаю приложение, в котором вы можете сохранить название продукта и его цену в базе данных Realm и показать его в UItableViewController и в другом UITAbleViewController, чтобы отображалось только название продукта, и если вы нажмете на ячейку, я хочучто имя продукта добавляется к массиву строк, а цена этого продукта (которая не указана в этой конкретной ячейке) добавляется к другому массиву двойных значений.это возможно?Если да, как мне это сделать?

Я искал в Google и нашел ответ в StackOverflow: Получение данных от каждого UITableView Cells Swift , но его Ответ не помог, то естьпочему я пишу этот вопрос.

Я добавил эту часть ответа на вопрос о stackOverFlow, о котором я упоминал выше:

selectedProductsForSell.append(cell?.value(forKeyPath: item.name) as! String)

, но я не знаю, как добавить подключенную ценув другой массив

Когда я запускаю приложение на iPad, когда я вкладываю ячейку, чтобы добавить значение (как называется продукт) в массив, выдается следующая ошибка:

terminating with uncaught exception of type NSException

и это идет в appDelegate.swift

любые идеи о том, как решить эту проблему и любые идеи к тому, что я описал выше о добавлении имени и цены?

заранее спасибо!Benji

Ответы [ 2 ]

1 голос
/ 28 июня 2019

Вместо доступа к cell для данных вы должны использовать tableView's dataSource для этого.

Если model, который вы используете в качестве источника данных tableView's, выглядит примерно так,

struct Product {
    var name: String
    var price: Double
}

Затем вы можете получить доступ к name и price каждого product в tableView(_:didSelectRowAt:), например,

var products = [Product]() //use this as dataSource of the tableView
var names = [String]()
var prices = [Double]()

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    let product = self.products[indexPath.row]
    self.names.append(product.name)
    self.prices.append(product.price)
}
1 голос
/ 28 июня 2019

Данные, поступающие в ячейку, поступают из установленного вами делегата UITableViewDataSource. Таким образом, вы уже должны иметь доступ к этим данным.

Вместо того, чтобы пытаться извлечь данные из элемента пользовательского интерфейса, извлеките их из источника.

Вы можете либо добавить эту информацию при выборе каждого элемента, либо использовать UITableView indexPathForSelectedRows , чтобы получить список путей индекса для всех выбранных элементов.

Тогда вы просто получаете продукты по этим индексам в своем источнике данных

Некоторые указания ...

// top of class, as an example
var products: [Product]()
var selectedProducts: [Product]()

// later in your code somewhere, maybe on didSelectRow
let indexPaths = tableView.indexPathsForSelectedRows
selectedProducts = indexPaths.map { products[indexPath.row] }

// if you just need names
let names = selectedProducts.map { $0.name } 

// or a tuple, containing name and price
let data = selectedProducts.map { ($0.name, $0.price) }

// a better option might be a dictionary
var shoppingList = [String, Double]()
selectedProducts.map { shoppingList[$0.name] = $0.price }  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...