代码之家  ›  专栏  ›  技术社区  ›  Nrc

核心数据。按日期筛选

  •  0
  • Nrc  · 技术社区  · 4 年前

    我在核心数据中有一个.xcdatamodel,其中包含实体内容和属性dateCreated类型Date和text1类型String。

    //CREATE
       func createData() {
           guard let appDelegate = UIApplication.shared.delegate as? AppDelegate else { return }
           let managedContext = appDelegate.persistentContainer.viewContext
           let contentEntity = NSEntityDescription.entity(forEntityName: "Content", in: managedContext)!
    
           let content = NSManagedObject(entity: contentEntity, insertInto: managedContext)
           content.setValue(Date(), forKey: "dateCreated")
           content.setValue("someText", forKey: "text1")
    
           do {
               try managedContext.save()
           } catch let error as NSError {
               print("Could not save. \(error), \(error.userInfo)")
           }
        }
    
    //READ
        func readData() {
               guard let appDelegate = UIApplication.shared.delegate as? AppDelegate else { return }
               let managedContext = appDelegate.persistentContainer.viewContext
               let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "Content")
               fetchRequest.predicate = NSPredicate(format: "text1 = %@", "some text")
    
               do {
                   let result = try managedContext.fetch(fetchRequest)
    
                   for data in result as! [NSManagedObject] {
                       print(data.value(forKey: "dateCreated") as! Date)
                       print(data.value(forKey: "text1") as! String)
                   }
               } catch {
                   print("Failed")
               }
           }
    

    如果我打印dateCreated,它会给出:2020-03-12 10:20:42+0000 我的问题是:我如何阅读和过滤日期?只有日期,没有时间。例如2020-03-12或任何其他没有时间的日期:

    fetchRequest.predicate = NSPredicate(format: "dateCreated = %@", ?????)
    
    0 回复  |  直到 4 年前
        1
  •  0
  •   Mushfiq Humayoon    4 年前

    CreateData() 您正在使用存储日期 . 所以才会印这个 2020-03-12 10:20:42 +0000

    fetchRequest.predicate = NSPredicate(format: "text1 = %@", "some text")
    

    fetchRequest.predicate = NSPredicate(format: "dateCreated = %@", Date())
    

    如果您使用这个谓词而不是text1,那么核心数据将给出带有日期的结果,并且如果有时间,则很难进行过滤。所以你必须把日期的格式改为 每天

    可以使用更改当前日期格式 日期格式化程序()

    //Needed date format
    let dateFormat = DateFormatter()
    dateFormat.dateFormat = "yyyy-MM-dd"
    let formattedDate = dateFormat.string(from: Date())
    

    因此,请尝试通过更改其格式来插入Date()

    //in CreateData()
    content.setValue(formattedDate, forKey: "dateCreated")
    
    //in ReadData()
    fetchRequest.predicate = NSPredicate(format: "dateCreated = %@", formattedDate)