最近、リマインダーのアプリを作っているけどEKReminderの仕様?なのか厄介だった点が出てきた。
それは、EKReminderはeventStore.save
を実行すると、アプリ内に変数として保持している値も自動で更新されると言うこと。
例えば、
var hogeReminders: [EKReminder]
Manager.swift
func save(reminder: EKReminder, completion: @escaping (_ isSuccess: Bool) -> Void) {
print(reminder.title) // "HogeHoge"
print(hogeReminders.first?.title) // ""
self.eventStore.requestAccess(to: .reminder) { (granted, error) in
if granted == false { completion(false); return }
do {
try self.eventStore.save(reminder, commit: true) // ここでプロジェクト内の変数も全て更新される?
print(reminder.title) // "HogeHoge"
print(hogeReminders.first?.title) // "HogeHoge"
completion(true)
} catch {
completion(false)
}
}
}
ViewController.swift
override func viewDidLoad() {
var manager = Manager()
manager.save(reminder: hogeReminders.first!) { (isSuccess) in
}
}
hogeRemindersを保持しておいて、保存後の値と比較し更新されたらRemindersTableViewを更新しようと処理を書いた。けど、値が更新されたことを確認できたなかった(hogeReminders != reminders
では既にhogeRemindersが自動更新された後だからダメ)のでちょっと悩みました。
もし間違ってたり、良い解決策があったら教えてください。