swift - 使用核心数据的收藏夹按钮

标签 swift database button entity favorites

我只需要向数据库添加一个条目。如果数据库为空,则由于某种原因不添加任何内容。如果数据库中有记录,那么由于周期原因,我添加了几个相同的记录。这是我的代码:

import UIKit
import AVFoundation
import CoreData

class PlayerViewController: UIViewController, VLCMediaPlayerDelegate {
@IBOutlet var favoriteBarButton: UIBarButtonItem!

@IBAction func addFavorites(_ sender: UIBarButtonItem) { 
let appDelegate = UIApplication.shared.delegate as! AppDelegate
let context = appDelegate.persistentContainer.viewContext
let entity = NSEntityDescription.entity(forEntityName: "MarkersModel", in: context)

let request: NSFetchRequest<MarkersModel> = MarkersModel.fetchRequest()
request.returnsObjectsAsFaults = false
request.includesPropertyValues = false
    do {                    let result = try context.fetch(request)

                                            for (i, s) in result.enumerated() {
                                                // Can simply use 'sender' here, no need to index into senderArray.
                                                if s.nameCam == self.webcamTitle! {
                                                    let value = result[i]
                                                    context.delete(value)
                                                    self.favoriteBarButton?.tintColor = .red
                                                    //do {
                                                    try context.save()
                                                    //}
                                                }
                                                if s.nameCam != self.webcamTitle!
                                                {
                                                    let newFavoriteCamera = NSManagedObject(entity: entity!, insertInto: context)
                                                    newFavoriteCamera.setValue(self.webcamTitle, forKey: "nameCam")
                                                    newFavoriteCamera.setValue(self.webcamURL, forKey: "urlCam")
                                                    self.favoriteBarButton?.tintColor = .green
                                                    //do {

                                                    //let value = result[i]
                                                    context.insert(newFavoriteCamera)
                                                    try context.save()
                                                    //}
                                                }
                                            }
}


enter image description here

最佳答案

我做了我想做的。这是我对任何有兴趣的代码。它有效=)

@IBAction func addFavorites(_ sender: UIBarButtonItem) {
    let appDelegate = UIApplication.shared.delegate as! AppDelegate
    let context = appDelegate.persistentContainer.viewContext
    let entity = NSEntityDescription.entity(forEntityName: "MarkersModel", in: context)
    let request: NSFetchRequest<MarkersModel> = MarkersModel.fetchRequest()
    request.returnsObjectsAsFaults = false
    var array: [String] = []

    do {
        let result = try context.fetch(request)
        for data in result {
            array.append(data.nameCam!)
            print(array)
        }
    }catch {
        print(error)}
    do {
        let newFavoriteCamera = NSManagedObject(entity: entity!, insertInto: context)
        newFavoriteCamera.setValue(self.webcamTitle, forKey: "nameCam")
        newFavoriteCamera.setValue(self.webcamURL, forKey: "urlCam")
        let result = try context.fetch(request)

        if array.contains(self.webcamTitle) {
            for data in result {
                if data.nameCam == self.webcamTitle {
                    favoriteBarButton?.tintColor = .red
                    print("YES")
                    context.delete(data)
                    try context.save()
                }
            }
        } else{
            print("NO")
            self.favoriteBarButton?.tintColor = .green
            try context.save()
            print(array)
        }
    } catch {
        print(error)}
}


func RequestFromDB() {
    let appDelegate = UIApplication.shared.delegate as! AppDelegate
    let context = appDelegate.persistentContainer.viewContext
    let entity = NSEntityDescription.entity(forEntityName: "MarkersModel", in: context)

    let request: NSFetchRequest<MarkersModel> = MarkersModel.fetchRequest()
    request.returnsObjectsAsFaults = false

    var array1: [String] = []

    do {
        let result = try context.fetch(request)
        for data in result {
            array1.append(data.nameCam!)
        }
    } catch {
        print(error)}

    print(array1)
    //let u = "Maine, Caribouw"
    if array1.contains(self.webcamTitle) {
        print("YES")
        self.favoriteBarButton?.tintColor = .green
    } else{
        print("NO")
        self.favoriteBarButton?.tintColor = .red
    }


}
override func viewDidLoad() {
    super.viewDidLoad()
    RequestFromDB()


}

关于swift - 使用核心数据的收藏夹按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56082530/

相关文章:

ios - Swift 括号中的赋值

java - 无法将值从 Java 代码传递到 JSP

sql - ERD 图中的关系何时在 RDBMS 中获得单独的表

java - 错误 : SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length

jquery - 如何在上传时禁用页面上的所有按钮?

javascript - 输入文本和带有图标的按钮

ios - 在 Swift 中使用 AVPlayer 播放歌曲

ios - NSFetchedResulstsSectionInfo objectAtIndex 的语法 - Swift

ios - 从公共(public)记录类型中获取并保存到设备的所有记录

java - 如何在方解石中将项目、过滤器、聚合下推到 TableScan