Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift CoreData获取问题:获取具有特定天数数组的实体_Swift_Core Data_Nspredicate_Nsfetchrequest - Fatal编程技术网

Swift CoreData获取问题:获取具有特定天数数组的实体

Swift CoreData获取问题:获取具有特定天数数组的实体,swift,core-data,nspredicate,nsfetchrequest,Swift,Core Data,Nspredicate,Nsfetchrequest,我保存了实体并给它们一个名为“date”的属性。我的目标是获取特定天数的对象。由于Date(NSDate)对象是时间上的特定时刻,我不得不为我想要获取的每一天创建“日期范围” 我如何才能有效地处理这个问题?我应该为N天创建N个谓词,还是创建一个带有“AND”子句的大谓词?有没有聪明的方法来实现这一共同目标 如果您需要多次获取数据(因此所有事件),您不应该每次请求都获取数据,最好对它们进行过滤 例如: var allEvents = [Events]() ... let fetchRequest

我保存了实体并给它们一个名为“date”的属性。我的目标是获取特定天数的对象。由于Date(NSDate)对象是时间上的特定时刻,我不得不为我想要获取的每一天创建“日期范围”

我如何才能有效地处理这个问题?我应该为N天创建N个谓词,还是创建一个带有“AND”子句的大谓词?有没有聪明的方法来实现这一共同目标

如果您需要多次获取数据(因此所有事件),您不应该每次请求都获取数据,最好对它们进行过滤

例如:

var allEvents = [Events]()

...
let fetchRequest = NSFetchRequest(entityName: "events")
allEvents = try context.executeFetchRequest(fetchRequest) as! [Event]
然后,当你需要的时候

1。对于特定日期

let calender = NSCalendar.currentCalendar()
eventsForSelectedDay = events.filter( { return calender.isDate($0.yourDateProperty, inSameDayAsDate: self.currentSelectedDate) == true } )
eventsForSelectedDays = events.filter( { return $0.yourDateProperty >= dateFrom && $0.yourDateProperty < dateTo } )
2。对于日期范围

let calender = NSCalendar.currentCalendar()
eventsForSelectedDay = events.filter( { return calender.isDate($0.yourDateProperty, inSameDayAsDate: self.currentSelectedDate) == true } )
eventsForSelectedDays = events.filter( { return $0.yourDateProperty >= dateFrom && $0.yourDateProperty < dateTo } )
eventsForSelectedDays=events.filter({return$0.yourDateProperty>=dateFrom&&$0.yourDateProperty
那么您将首先获取所有实体,然后通过筛选特定范围来获取所需的选择?听起来不错,但我搜索特定谓词的原因是内存原因。对于应该提取到内存中的对象数量是否有一个阈值(关注性能)?除此之外,很好的答案是.isDate(u:inSameDayAsDate:):如果两个NSDate实例在同一天,则返回true,不需要深入研究日期组件。您的示例是:
let filtered=events.filter{calendar.isDate($0.date,inSameDayAs:otherDate)}
NSCoumpoundPredicate
应该是要使用的,为您想要使用的每一天创建一个OR谓词“date>=StartOfDay和date>=endOfDay”,并用OR组合它们。最后确实使用了复合谓词。谢谢