根据今天的日期检查 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的主要内容,如果未能解决你的问题,请参考以下文章