Основные данные вызывают сбой iPhone - PullRequest
0 голосов
/ 24 сентября 2018

У меня нет проблем с сохранением данных в Core Data.моя проблема в том, что VC я должен получить данные.

CoreData

@objc(ItemInCard)
public class ItemInCard: NSManagedObject {

}

FETCH

let fetchRequest : NSFetchRequest<ItemInCard> = ItemInCard.fetchRequest()
    do
    {
        let itemIncard = try  PersistanceService.context.fetch(fetchRequest)
        self.item = itemIncard
        self.Tableview.reloadData()
    }
    catch
    {

    }

представление таблицы

var item = [ItemInCard]()
    //MARK: - Table view
func numberOfSections(in tableView: UITableView) -> Int {
    return 1
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

    print("=======")
    print(item)
    return item.count
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "ShoppingCardCell") as? ShppingCellCustomTableViewCell


    cell!.textLabel?.text = item[indexPath.row].productTitleCore

    self.Tableview.reloadData()
    return cell!
}
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
    return 180
}

Пока этот vc открыт в приложении, он печатает основные данные (я добавил печать, чтобы проверить, что происходит

продолжает печатать основные данные ниже

[<ItemInCard: 0x281a4efd0> (entity: ItemInCard; id: 0x87c125f9e2c25dff <x-coredata://139AE9B3-30B6-4857-8313-456481AF833C/ItemInCard/p1> ; data: {
    paymentTypeCore = "\U0648\U0627\U0631\U064a\U0632\U064a";
    priceCore = 10000;
    priceTypeCore = "\U0639\U0627\U062f\U06cc-test";
    productTitleCore = "\U062c\U0648 \U0627\U06a9\U0631\U0627\U06cc\U0646 \U0628\U0646\U062f \U0627\U0645\U0627\U0645 \U062a\U062d\U0648\U06cc\U0644 \U0645\U0647\U0631\U

, но у меня есть только одни данные в приложении. Таблица также не заполнена

Ответы [ 3 ]

0 голосов
/ 24 сентября 2018

Удалите вызов reloadData из вашего метода cellForRowAt.cellForRowAt вызывается, когда приложению необходимо перезагрузить tableView.По сути, вы говорите ему начинать перезагрузку после создания каждой ячейки, чтобы вы никогда не проходили первую ячейку.Это объясняет, почему вы видите только один предмет.

0 голосов
/ 24 сентября 2018

Не вызывать tableView.reloadData() в методе cellForRowAt.Потому что это заставит tableView перезагружаться каждый раз, когда он пытается загрузить ячейку.

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "ShoppingCardCell") as? ShppingCellCustomTableViewCell


    cell!.textLabel?.text = item[indexPath.row].productTitleCore

    //Remove or comment this line self.Tableview.reloadData()
    self.Tableview.reloadData()
    return cell!
}
0 голосов
/ 24 сентября 2018

Когда вы звоните var item = [ItemInCard]()?

Если

let fetchRequest : NSFetchRequest<ItemInCard> = ItemInCard.fetchRequest()

вызывается раньше

var item = [ItemInCard]()

, то вы нашли свою проблему.

Вызов var item = [ItemInCard]() после self.item = itemIncard создаст новый экземпляр и сведет на нет все, что было введено в self.item.

Также опубликуйте, что item.count возвращает, чтобы получить дополнительную помощь по вашей проблеме.Удачного кодирования!

...