根据今天的日期检查 CoreData

Posted

技术标签:

【中文标题】根据今天的日期检查 CoreData【英文标题】:Check CoreData against todays date 【发布时间】:2020-01-05 15:16:45 【问题描述】:

当 CoreData 记录的“CreatedAt”属性(日期)与今天的日期匹配时,我试图在内容视图中隐藏“隐藏我”文本。

DiaryItem.swift

public class DiaryItem:NSManagedObject,Identifiable 
    @NSManaged public var createdAt:Date?
    @NSManaged public var title:String?


extension DiaryItem 
    static func getAllDiaryItems() -> NSFetchRequest<DiaryItem> 
       let request:NSFetchRequest<DiaryItem> = DiaryItem.fetchRequest() as!       NSFetchRequest<DiaryItem>

    let sortDescriptor = NSSortDescriptor(key: "createdAt", ascending: true)

    request.sortDescriptors = [sortDescriptor]

    return request
    

简化的 ContentView.swift

import SwiftUI
import CoreData

struct ContentView: View 

@Environment(\.managedObjectContext) var managedObjectContext

@FetchRequest(entity: DiaryItem.entity(), sortDescriptors: [
    NSSortDescriptor(keyPath: \DiaryItem.createdAt, ascending: false),
]) var diaryItems : FetchedResults<DiaryItem>

@State var show = false
@State private var showEntry: Bool = false

var body: some View 

        VStack 

            Text("Hide me!")

            List

                ForEach(self.diaryItems)  diaryItem in

                    DiaryItemView(
                        title: diaryItem.title!,
                        createdAt: "\(diaryItem.createdAt!)",
                        diaryItem: diaryItem
                    )
                
            
        
    

我知道我可以比较如下两个日期:

var first = Date()  

let isToday = Calendar.current.isDateInToday(first)

如何检查用户是否已经创建了 CreatedAt 日期与当前日期匹配的 CoreData 记录,如果是,则隐藏“隐藏我”文本?

感谢您阅读任何帮助将是惊人的!

【问题讨论】:

请再解释一下 - 您到底想隐藏什么,什么时候隐藏? (在每一行隐藏一些东西?或者在视图的其他地方隐藏一些东西?) @pbasdf 感谢您与我们联系。我想在内容视图中隐藏“隐藏我”文本。 帮助您了解更多关于隐藏该文本所需条件的信息,例如 pbasdf 已经写过的。只需隐藏您的文本就可以使用hidden()modifier,如下所示:Text("Hide me!").hidden()。但我认为这不是你要找的。​​span> @user3687284 谢谢 - 条件是如果用户已经创建了一个 CoreData 记录,该记录的 CreatedAt 日期与当前日期相同,那么我想隐藏“隐藏我”文本。 【参考方案1】:

如果您将 Text("Hide me") 替换为以下内容,如果列表中的第一项(即最新的,如您所拥有的 ascending: false)在今天,则它应该禁止显示文本:

if (diaryItems.first == nil || Calendar.current.isDateInToday(diaryItems.first!.createdAt!)) 
    Text("Hide me!")
    

如果某些 diaryItems'createdAt 可能在未来出现,事情会变得更加复杂。

【讨论】:

这非常适合我需要的东西,非常感谢!唯一的问题是如果没有 diaryItems,应用程序会崩溃。知道如何解决吗? 如果没有diaryItems,“隐藏我”是显示还是隐藏? 如果没有日记项目应该显示。谢谢。 我(懒惰地)用过!展开,如果 diaryItems 为空则失败。所以我更新了答案,包括一个特定的检查,看看它是否为 nil。

以上是关于根据今天的日期检查 CoreData的主要内容,如果未能解决你的问题,请参考以下文章

检查给定日期是不是存在于从日期到今天之间

如何检查今天是不是在 Twig 的两个日期之间?

如何检查来自firebase的日期是不是等于今天[重复]

PostgreSQL,检查相对于“今天”的日期

Moment JS - 检查日期是今天还是将来

JPQL 在@Query 注释中检查大于小于今天的日期