核心数据检查是不是已经保存,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的主要内容,如果未能解决你的问题,请参考以下文章