核心数据检查是不是已经保存,Swift

Posted

技术标签:

【中文标题】核心数据检查是不是已经保存,Swift【英文标题】:Core Data check if is already saved, Swift核心数据检查是否已经保存,Swift 【发布时间】:2016-08-21 07:40:35 【问题描述】:

我正在构建应用程序,其中显示来自 plist 的随机报价,您可以将其保存到收藏夹(核心数据),我想检查我的随机生成的报价是否已经存在于核心数据中,我只想更改保存按钮它已经保存了

Quote.swift:

var quotesPlist: NSArray! = []

override func awakeFromNib() 
    loadQuote()


func loadQuote()
    let path = NSBundle.mainBundle().pathForResource("quotesList", ofType: "plist")
    quotesPlist = NSArray(contentsOfFile: path!)
    quoteLbl.text = quotesPlist[Int(randomNumber())] as? String

SavedQuote 属性:

@NSManaged var quote: String?
@NSManaged var creationDate: NSDate?
@NSManaged var uuid: String?

这是 HomeVC:

 func createQuoteFromNib() -> QuoteView! 
    return NSBundle.mainBundle().loadNibNamed("QuoteView", owner: self, options: nil)[0] as? QuoteView



@IBAction func saveACTION(sender: UIBarButtonItem) 

    if let label = currentQuote.quoteLbl.text where label != "" 

        let app = UIApplication.sharedApplication().delegate as! AppDelegate
        let context = app.managedObjectContext
        let entity = NSEntityDescription.entityForName("SavedQuotes", inManagedObjectContext: context)!
        let quote = SavedQuotes(entity: entity, insertIntoManagedObjectContext: context)

        quote.quote = currentQuote.quoteLbl.text
        quote.creationDate = NSDate()
        quote.uuid = NSUUID().UUIDString
        context.insertObject(quote)


        do 
            try context.save()
         catch let err as NSError 
            print(err.debugDescription)
        

    

这是我的收藏夹VC:

 var quotesArray = [SavedQuotes]()

@IBOutlet weak var tableView: UITableView!

func fetchAndSetResults()
    let app = UIApplication.sharedApplication().delegate as! AppDelegate
    let context = app.managedObjectContext
    let fetchRequest = NSFetchRequest(entityName: "SavedQuotes")
    let dateSort = NSSortDescriptor(key: "creationDate", ascending: false)
    fetchRequest.sortDescriptors = [dateSort]

    do 
        let results = try context.executeFetchRequest(fetchRequest)
        quotesArray = results as! [SavedQuotes]
     catch let err as NSError 
        print(err.debugDescription)
    

【问题讨论】:

【参考方案1】:

尚不清楚您是如何生成此新报价的。在调用insertIntoManagedObjectContext 之前,您至少需要使用获取请求来检查报价是否存在。只要报价存在并且您正在配置视图(使用报价文本和保存按钮),您就可以这样做。

您的 fetch 请求使用一个简单的谓词来检查与 quote 文本匹配的引用。

您已经有一个列出所有引号的获取请求,因此您只需添加一个格式为 "quote = %@" 的谓词并检查结果计数(应始终为 0 或 1 (分别表示保存和不保存)。

【讨论】:

以上是关于核心数据检查是不是已经保存,Swift的主要内容,如果未能解决你的问题,请参考以下文章

SWIFT:在保存到 sqlite 之前检查数据是不是存在

swift ios如何检查核心数据库中的字段

检查用户名是不是已经存在:Swift、Firebase

Firebase Auth 和 Swift:检查电子邮件是不是已在数据库中

快速删除过去保存的核心数据条目

快速为聊天应用创建核心数据