Swift - Problem with reading EKReminder entries

Hey,


i am currently working on reading out all reminders with their entries from the EKEventStore database.


I already receive all reminders on the phone but I didn´t get any reminder entries.

So can you help me please? I don´t know what I am doing wrong.


Here is the current code and how I do it right know:

import UIKit
import EventKit
class TaskTableViewController: UITableViewController {
    var eventStore = EKEventStore()
    var listOfTaskLogData:[TaskLogData]?
  
  
    /
    /
    /
    override func viewDidLoad() {
        super.viewDidLoad()
      
        /
        var refreshControl = UIRefreshControl()
        refreshControl.addTarget(self, action: Selector("refreshTableView"), forControlEvents: UIControlEvents.ValueChanged)
        self.refreshControl = refreshControl
    }
  
    /
    /
    /
    override func viewWillAppear(animated: Bool)
    {
        if self.listOfTaskLogData != nil && self.listOfTaskLogData?.count > 0
        {
            self.listOfTaskLogData?.removeAll()
        }
      
        self.checkReminderAuthorizationStatus()
      
        if self.listOfTaskLogData != nil
        {
            var fileWriter = FileWriter()
            fileWriter.writeCalendarLogDataToFile(self.listOfTaskLogData!, fileType: FileType.Text, logCategory: "TaskLog", dataType:DataType.Task ,appendToFile: false)
        }
    }
  
    /
    /
    /
    override func didReceiveMemoryWarning()
    {
        super.didReceiveMemoryWarning()
    }
  
  
    /
    /
    /
    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?)
    {
        if (segue.identifier == "showEventsForReminder")
        {
            var vc = segue.destinationViewController as! TaskEventsViewController
            /
            let selectedIndex = self.tableView.indexPathForCell(sender as! TaskLogEntryCell)
            vc.taskLogData = self.listOfTaskLogData![selectedIndex!.row]
        }
    }
  
    /
    /
    /
    func loadReminders()
    {
        let allReminders = self.eventStore.calendarsForEntityType(EKEntityTypeReminder)
        /
        let startDate       = DateHelper.getStartOfDayForDate(NSDate())
        let endDate         = DateHelper.getEndOfDayForDate(NSDate())
        let searchPredicate = self.eventStore.predicateForEventsWithStartDate(startDate, endDate: endDate, calendars: allReminders)
      
        /
      
        /
      
        if allReminders != nil
        {
            for reminder in allReminders
            {
                var taskLog = TaskLogData()
                taskLog.reminderTitle = reminder.title
                var events     = self.eventStore.eventsMatchingPredicate(searchPredicate) as? [EKReminder] /
              
                /
              
                if events == nil
                {
                    NSLog("No events could be found")
                    taskLog.countOfEventsOnDay = 0
                }
                else
                {
                    taskLog.countOfEventsOnDay = 0
                  
                    /
                    for event in events!
                    {
                        NSLog("Event: %@", event.title!)
                        /
                        if event.calendar.title == reminder.title
                        {
                            ++taskLog.countOfEventsOnDay!
                          
                            /
                            if taskLog.reminderEvents == nil
                            {
                                taskLog.reminderEvents = [EKEvent]()
                                taskLog.reminderEvents!.append(event)
                            }
                            else
                            {
                                taskLog.reminderEvents!.append(event)
                            }
                        }*/
                    }
                }
              
                if self.listOfTaskLogData == nil
                {
                    self.listOfTaskLogData = [TaskLogData]()
                    self.listOfTaskLogData?.append(taskLog)
                }
                else
                {
                    self.listOfTaskLogData?.append(taskLog)
                }
            }
        }
    }
  
    /
    /
    /
    func requestAccessToReminder() {
        eventStore.requestAccessToEntityType(EKEntityTypeReminder, completion: {
            (accessGranted: Bool, error: NSError!) in
          
            if accessGranted == true {
                dispatch_async(dispatch_get_main_queue(), {
                    self.loadReminders()
                    self.refreshTableView()
                })
            } else {
                dispatch_async(dispatch_get_main_queue(), {
                    /
                    NSLog("Permissions are required")
                    self.refreshTableView()
                })
            }
        })
    }
  
    /
    /
    /
    func checkReminderAuthorizationStatus()
    {
        var authorizationStatus:EKAuthorizationStatus = EKEventStore.authorizationStatusForEntityType(EKEntityTypeReminder)
      
        switch authorizationStatus {
        case EKAuthorizationStatus.Restricted, EKAuthorizationStatus.Denied:
            /
            /
            let alert = UIAlertView(title: "Permissions required!", message: "You have not granted permission for this app to access your Calendar", delegate: nil, cancelButtonTitle: "OK")
            alert.show()
            break
        case EKAuthorizationStatus.Authorized:
            self.loadReminders()
            self.refreshTableView()
            break;
        case EKAuthorizationStatus.NotDetermined:
            /
            self.requestAccessToReminder()
            break
        default:
            let alert = UIAlertView(title: "Privacy Warning", message: "You have not granted permission for this app to access your Calendar", delegate: nil, cancelButtonTitle: "OK")
            alert.show()
            break;
        }
    }
}
/
/
/
extension TaskTableViewController
{
    /
    /
    /
    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int
    {
        if listOfTaskLogData != nil && listOfTaskLogData?.count > 0
        {
            return listOfTaskLogData!.count
        }
      
        return 0
    }
  
    /
    /
    /
    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
    {
        let cell = self.tableView.dequeueReusableCellWithIdentifier("taskLogEntryCell", forIndexPath: indexPath) as! TaskLogEntryCell
      
        if self.listOfTaskLogData != nil
        {
            let data = self.listOfTaskLogData![indexPath.row]
            cell.lblTaskName.text = data.reminderTitle
            cell.lblCountOfReminderEvents.text = "Events: \(data.countOfEventsOnDay!.description)"
        }
      
        return cell
    }
  
    /
    /
    /
    func refreshTableView() {
        self.tableView.hidden = false
        self.tableView.reloadData()
        refreshControl?.endRefreshing()
    }
}




Thank you so much for your help

Regards

Michael

Swift - Problem with reading EKReminder entries
 
 
Q