我有两个实体:CoreData一对多的关系比较看重
AgendaEvents
AgendaDates
AgendaDates有一个与AgendaEvents一对多的关系。
我试图在一个临时数组来存储(VAR myTempEvents = [AgendaEvent]()) 所有具有内部AgendaEvents AgendaDates一个日期,它等于一个定义的日期(让数值指明MyDate =日期())
到目前为止,我有这样的:
var myEventDate = [String]()
var myTempEvents = [AgendaEvent]()
var myEvents = [AgendaEvent]()
var myDate = Date()
func getEventDates() {
for event in myEvents {
for date in (event.agendaDates as? Set<AgendaDate>)! {
let eventDates = date.agendaDates
eventDate = eventDates
formatter.dateFormat = "dd MM yyyy"
let eventDateString = formatter.string(from: eventDate)
myEventDate.append(eventDateString)
}
}
}
什么我现在需要做的是检查的AgendaEvents有一个日期等于指明MyDate,如果是的话我会需要该事件添加到myTempEvents。
这应该发生在这个函数内:
func configureCell(cell: CalendarAgendaCell, indexPath: IndexPath) {
for dates in calendar.selectedDates {
for dateOfEvent in myEventDate {
formatter.dateFormat = "dd MM yyyy"
let dateToCompare = formatter.string(from: dates)
if dateOfEvent == dateToCompare {
let myEvent = myTempEvents[indexPath.row]
cell.configureCell(agendaEvent: myEvent)
} else {
//empty the tempArray
}
}
}
}
而这个功能是由cellForRowAt FUNC键的tableView称为:
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
// Dequeue Cell
let cell = tableView.dequeueReusableCell(withIdentifier: "AgendaCell", for: indexPath) as! AgendaCell
//Fetch model object to display
configureCell(cell: cell, indexPath: indexPath)
return cell
}
我不是在核心数据(仍在学习)非常好,所以任何帮助将非常感激。
谢谢!
UPDATE --------- 14/09/17
由于@Simo好心建议我修改我的代码如下所示:
func agendaEventsWithDate(date: Date) -> NSFetchRequest<NSFetchRequestResult>
{
// create a fetch request that will retrieve all the AgendaEvents.
let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "AgendaEvent")
// set the predicate to only keep AgendaEvents where the related AgendaDate's date matches the passed in date.
fetchRequest.predicate = NSPredicate(format: "ANY agendaDates.agendaDates == %@", date as CVarArg)
return fetchRequest
}
let myTempEvents = try?context.fetch(agendaEventsWithDate(date: Date()))
其中上下文是:
let ad = UIApplication.shared.delegate as! AppDelegate
设情境= ad.persistentContainer.viewContext
但是我得到这个错误:
模糊使用'fetch'
谢谢!
你的意思是使用这个:let ad = UIApplication.shared.delegate as! AppDelegate let context = ad.persistentContainer.viewContext;让myTempEvents =试试? context.execute(self.agendaEventsWithDate(date:somedate)) – Marco
那么您可以从任何地方访问您的托管对象上下文。就我个人而言,我不会在应用程序委托中设置我的Core Data堆栈,因为有更多更干净的方法来完成它,但这是另一个话题本身。 – Simo
好的,谢谢......我正在尝试按照你的建议去做......但我得到了这个:模糊地使用'fetch'。我将编辑我的问题,以准确显示我所做的事情...... – Marco