簡體   English   中英

swift coredata 查詢不適用於今天的日期

[英]swift coredata query not working for today's date

我有一個名為 Places 的類,由 CoreData 管理。 這個對象有一個 Date 對象作為時間戳。

我有這個查詢僅用於探查今天的地方。 問題是我今天只登錄了 2 個地方,但是它給我帶來了 21 條記錄,這是我沒想到的

func updatePlaceMarksForADateFromDatabase(date: Date) {
    var calendar = Calendar.current
    calendar.timeZone = TimeZone(identifier: "UTC")!
    let dateFrom = calendar.startOfDay(for: date)
    let dateTo = calendar.date(byAdding: .day, value: 1, to: dateFrom)
    
    // Set predicate as date being compliant with date
    let fromPredicate = NSPredicate(format: "%@ >= %@", date as NSDate, dateFrom as NSDate)
    let toPredicate = NSPredicate(format: "%@ < %@", date as NSDate, dateTo! as NSDate)
    let datePredicate = NSCompoundPredicate(andPredicateWithSubpredicates: [fromPredicate, toPredicate])

    // CoreData API's to list only today places
    let fetchRequest: NSFetchRequest<Places> = Places.fetchRequest()
    fetchRequest.predicate = datePredicate
    if let context = (UIApplication.shared.delegate as? AppDelegate)?
        .persistentContainer.viewContext {
      let sort = NSSortDescriptor(key: #keyPath(Places.timestamp), ascending: false)
      fetchRequest.sortDescriptors = [sort]
      if let placesCoreData = try?
          context.fetch(fetchRequest) {
        // Store it to the cache
        print(placesCoreData.count)
      }
    }
  }

你的謂詞是錯誤的。

let fromPredicate = NSPredicate(format: "%@ >= %@", date as NSDate, dateFrom as NSDate)
let toPredicate = NSPredicate(format: "%@ < %@", date as NSDate, dateTo! as NSDate)
let datePredicate = NSCompoundPredicate(andPredicateWithSubpredicates: [fromPredicate, toPredicate])

您不是針對Places的屬性對其進行測試。 目前,它相當於NSPredicate(value: true) ,因為date大於或等於dateFrom並且小於dateTo 它應該總是正確的(根據價值的創造方式)。 這就是為什么您在獲取時會獲取所有位置的原因。

它應該是:

let fromPredicate = NSPredicate(format: "%K >= %@", argumentArray: [#keyPath(Places.dateVariableName), dateFrom]
let toPredicate = NSPredicate(format: "%K < %@", argumentArray: [#keyPath(Places.dateVariableName), dateTo]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM