TableView не показывает ничего при использовании NSFetchResultsController - PullRequest
0 голосов
/ 11 марта 2019

Я пытаюсь создать небольшое приложение, такое как магазин, сохраняю имя и изображение содержимого объекта в coreData и пытаюсь вызвать его с помощью NSFetchResultsController, но это не дает мне никаких мыслей

Я загружаю свой проект на http://www.mediafire.com/file/kyb06frcmm7boqa/MyStore.zip/file

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

, и это код ViewController

class ViewController: UIViewController ,UITableViewDataSource,UITableViewDelegate,NSFetchedResultsControllerDelegate {

@IBOutlet weak var LaTableView: UITableView!
var controller:NSFetchedResultsController<Item>!
override func viewDidLoad() {
    super.viewDidLoad()
    LaTableView.dataSource=self
    LaTableView.delegate=self
    loadIetms()
}

   func numberOfSections(in tableView: UITableView) -> Int {

    return 1
}

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
   if let sections = controller.sections{
        let secinfo = sections[section]
         return secinfo.numberOfObjects         }
    return 0
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "itemcell", for: indexPath) as! TableViewCell

   ConCell(cell: cell, indexPath: indexPath)
    return cell
}
func ConCell(cell:TableViewCell , indexPath:IndexPath){
    let itemu = controller.object(at: indexPath)
    cell.SetCellContent(item: itemu)
}

// End OF Table View 

// Load From CoreData

func loadIetms(){

    let requstfetch:NSFetchRequest<Item>=Item.fetchRequest()
    let date_add = NSSortDescriptor(key: "name_item", ascending: false)
    requstfetch.sortDescriptors=[date_add]
    controller = NSFetchedResultsController(fetchRequest: requstfetch, managedObjectContext: Context, sectionNameKeyPath: nil, cacheName: nil)
    controller.delegate = self
     do{
        try controller.performFetch()
     }
     catch{
        print("can't load data")
    }}

  func controllerWillChangeContent(_ controller: NSFetchedResultsController<NSFetchRequestResult>){
    LaTableView.beginUpdates()
    }
    func controllerDidChangeContent(_ controller: NSFetchedResultsController<NSFetchRequestResult>){
    LaTableView.endUpdates()
    }

   func controller(_ controller: NSFetchedResultsController<NSFetchRequestResult>, didChange anObject: Any, at indexPath: IndexPath?, for type: NSFetchedResultsChangeType, newIndexPath: IndexPath?) {
        switch (type) {
        case.insert:
            if let indexPath = newIndexPath {
                LaTableView.insertRows(at: [indexPath], with: .fade)

            }
            break
        case.delete:
            if let indexPath = indexPath {
                LaTableView.deleteRows(at: [indexPath], with: .fade)
            }
            break
        case.update:
            if let indexPath = indexPath {
                let cell = LaTableView.cellForRow(at: indexPath) as! TableViewCell
                ConCell(cell: cell, indexPath: indexPath)
            }

            break
        case.move:
            if let indexPath = indexPath {
                LaTableView.deleteRows(at: [indexPath], with: .fade)
            }
            if let indexPath = newIndexPath {
                LaTableView.insertRows(at: [indexPath], with: .fade)
            }
            break
        }
    }

}

и этот код TableViewCell

class TableViewCell: UITableViewCell {

@IBOutlet weak var LaImageView: UIImageView!
@IBOutlet weak var LaItemName: UILabel!


@IBOutlet weak var LaStoreName: UILabel!

func SetCellContent(item:Item){

    LaItemName.text = item.name_item
    LaImageView.image = item.image as? UIImage
    LaStoreName.text = item.toStore?.name

1 Ответ

0 голосов
/ 11 марта 2019

проблема была решена путем исправления TableView с использованием ограничений в main.stroyborad

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