当我的应用程序中的项目被删除时,如何将提醒标记为已完成?
How do I mark a reminder as completed when Item is deleted in my Application?
我有一个项目列表,这些项目也保存在本机提醒应用程序中,还有一个功能可以在删除提醒时将其标记为已完成。
问题是当我删除一个项目时,应用程序崩溃了,我不知道为什么。
如果有人能提供帮助,我将非常高兴。
列表:
List{
ForEach(self.todoVM.todos, id: \.self ){todo in
ToDoItemView(todo: todo)
}.onDelete{indexSet in
self.todoVM.deleteTodo(todoIndex: indexSet.first ?? Int())
let store = self.eventStore
let todoItem = ToDoItem(context: self.context)
self.todoVM.complete(store.calendarItem(withIdentifier: todoItem.reminderidentifier ?? String()) as! EKReminder)
}
}
函数:
func Reminders(title: String, notes: String, alarmTime: Date) {
let todoItem = ToDoItem(context: context)
let store = self.eventStore
var identifier:String?
self.eventStore.requestAccess(to: EKEntityType.reminder, completion: {
granted, error in
if (granted) && (error == nil) {
print("granted \(granted)")
let reminder:EKReminder = EKReminder(eventStore: self.eventStore)
reminder.title = title
//reminder.priority = Int(truncating: NSNumber(value: self.prioritized))
//reminder.isCompleted = true
reminder.notes = notes
let alarmTime = alarmTime
let alarm = EKAlarm(absoluteDate: alarmTime)
reminder.addAlarm(alarm)
reminder.calendar = self.eventStore.defaultCalendarForNewReminders()
do {
try self.eventStore.save(reminder, commit: true)
identifier = reminder.calendarItemIdentifier
todoItem.reminderidentifier = identifier
} catch {
print("Cannot save")
return
}
print("Reminder saved")
}else{
}
})
}
func complete(_ reminder: EKReminder){
reminder.isCompleted = true
do {
try self.eventStore.save(reminder, commit: true)
} catch {
print("Cannot save")
return
}
}
根据你得到的错误,你正在解开一个 nil 的东西
let todoItem = ToDoItem(context: self.context)
self.todoVM.complete(store.calendarItem(withIdentifier: todoItem.reminderidentifier ?? String()) as! EKReminder)
问题出在这里。您正在使用可能未设置的标识符进行搜索。 (创建对象后在哪设置todoItem.reminderidentifier
?)
如果未设置,则您使用的是带 String()
的空字符串。强制将其解包为 EKReminder 是行不通的。你需要以不同的方式处理它。
我有一个项目列表,这些项目也保存在本机提醒应用程序中,还有一个功能可以在删除提醒时将其标记为已完成。
问题是当我删除一个项目时,应用程序崩溃了,我不知道为什么。 如果有人能提供帮助,我将非常高兴。
列表:
List{
ForEach(self.todoVM.todos, id: \.self ){todo in
ToDoItemView(todo: todo)
}.onDelete{indexSet in
self.todoVM.deleteTodo(todoIndex: indexSet.first ?? Int())
let store = self.eventStore
let todoItem = ToDoItem(context: self.context)
self.todoVM.complete(store.calendarItem(withIdentifier: todoItem.reminderidentifier ?? String()) as! EKReminder)
}
}
函数:
func Reminders(title: String, notes: String, alarmTime: Date) {
let todoItem = ToDoItem(context: context)
let store = self.eventStore
var identifier:String?
self.eventStore.requestAccess(to: EKEntityType.reminder, completion: {
granted, error in
if (granted) && (error == nil) {
print("granted \(granted)")
let reminder:EKReminder = EKReminder(eventStore: self.eventStore)
reminder.title = title
//reminder.priority = Int(truncating: NSNumber(value: self.prioritized))
//reminder.isCompleted = true
reminder.notes = notes
let alarmTime = alarmTime
let alarm = EKAlarm(absoluteDate: alarmTime)
reminder.addAlarm(alarm)
reminder.calendar = self.eventStore.defaultCalendarForNewReminders()
do {
try self.eventStore.save(reminder, commit: true)
identifier = reminder.calendarItemIdentifier
todoItem.reminderidentifier = identifier
} catch {
print("Cannot save")
return
}
print("Reminder saved")
}else{
}
})
}
func complete(_ reminder: EKReminder){
reminder.isCompleted = true
do {
try self.eventStore.save(reminder, commit: true)
} catch {
print("Cannot save")
return
}
}
根据你得到的错误,你正在解开一个 nil 的东西
let todoItem = ToDoItem(context: self.context)
self.todoVM.complete(store.calendarItem(withIdentifier: todoItem.reminderidentifier ?? String()) as! EKReminder)
问题出在这里。您正在使用可能未设置的标识符进行搜索。 (创建对象后在哪设置todoItem.reminderidentifier
?)
如果未设置,则您使用的是带 String()
的空字符串。强制将其解包为 EKReminder 是行不通的。你需要以不同的方式处理它。