CoreData обновляет несколько объектов - PullRequest
0 голосов
/ 10 февраля 2020

Я делаю RSS-ридер и хочу, чтобы элементы фидов можно было пометить как прочитанные. Я использую CoreData для своего проекта.

Моя модель:

enter image description here

RSSItemsTableViewController:

 class RSSItemsTableViewController: UITableViewController {

    @IBOutlet weak var feedNavigationItem: UINavigationItem!

    var linkRSS: String = ""
    var feeds: [RSSFeedCoreData] = []
    var coreData = CoreDataModel()

    override func viewDidLoad() {
        super.viewDidLoad()

        feeds = coreData.getDataRSSFeeds(selectRSS: selectedRSS!).sorted(by: {($0.timeCreate?.timeIntervalSince1970)! > $1.timeCreate!.timeIntervalSince1970}
    }

    // MARK: - Table view data source

    override func numberOfSections(in tableView: UITableView) -> Int {
        return 1
    }

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

    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "feedCell", for: indexPath) as! ItemFeedTableViewCell
        cell.feedTitle.text = feeds[indexPath.row].title
        cell.timeLabel.text = feeds[indexPath.row].timeCreate?.timeIntervalSinceNow.stringFromTimeInterval()
        cell.siteUrl.text = feeds[indexPath.row].siteUrl
        if let url = feeds[indexPath.row].imageUrl {
            cell.imageFeed.loadImage(from: url)
        } else {
            cell.widthImage.constant = 0
            cell.widthFromImage.constant = 0
            cell.widthFromImageSite.constant = 0
        }
        return cell
    }

               }
}

И Код модели CoreData:

class CoreDataModel {

    var fetchRequest: NSFetchRequest<RSSFeedCoreData>?        

    func getDataRSSFeeds(selectRSS: RSSCoreData) -> [RSSFeedCoreData] {
        let appDelegate = UIApplication.shared.delegate as! AppDelegate
        let context = appDelegate.persistentContainer.viewContext
        var RSSdataFeed: [RSSFeedCoreData] = []

        do {
            let RSSdata: [RSSCoreData] = try context.fetch(RSSCoreData.fetchRequest())
            RSSdataFeed = RSSdata[RSSdata.index(of: selectRSS)!].feeds?.allObjects as! [RSSFeedCoreData]
        }
        catch {
            RSSdataFeed = []
        }
        return RSSdataFeed
    }
            }
}

Я хочу добавить кнопку в RSSItemsTableViewController, чтобы загруженные элементы RSS читались как прочитанные (элемент чтения в CoreData должен быть обновлен для истинного значения для всех элементов канала). Как это можно сделать с помощью CoreData?

1 Ответ

1 голос
/ 10 февраля 2020

В вашем ItemFeedTableViewCell сохраните ManagedObjectID объекта RSSFeed при создании ячейки. Затем, когда вы нажмете кнопку read на своем пользовательском ItemFeedTableViewCell, просто используйте этот ManagedObjectID для поиска записи в таблице RSSFeed и установите значение read на YES.

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