EKEvents没有在swift中填充tableview

时间:2016-06-08 15:04:33

标签: ios swift uitableview events ekevent

我是编码和快速的新手。我正在尝试制作一个简单的预约应用程序来帮助我的医疗计划。这是我第一次尝试堆栈溢出问题:s,我在Swift中编码。我已经设法让应用程序访问事件存储,我已经能够将所有日历中的所有事件打印到控制台中,但我无法将事件显示在我的表中。我试图找到其他人是否有这个问题,但我仍然无法找到一个在我的项目中有效的解决方案。对不起,如果有人问其他地方。

我添加了下面的代码。我已经检查了所有的ViewController连接,并确保TableViewCell具有标识符“cell”以及检查附加的委托和数据源连接。

在函数tableView,numberOfRowsInSection中,当我将它打印到控制台时,我的返回self.events.count返回0。我的cellForRowAtIndexPath似乎也没有被调用..这就是为什么表中没有显示的原因?我是一个完整的新秀,所以我希望其中一些是有道理的,我可以完全脱离球......

我非常感谢任何帮助和指导!谢谢!

 class AppointViewController:  UIViewController, UITableViewDataSource, UITableViewDelegate {

var eventStore: EKEventStore!
var events = [EKEvent]()
var startDate = NSDate()
var endDate = NSDate()
var cellIdentifier = "cell"

@IBOutlet var tableView: UITableView!


override func viewDidLoad() {
    super.viewDidLoad()

    self.automaticallyAdjustsScrollViewInsets = false

    isAppAlreadyLaunchedOnce()

    self.tableView.dataSource = self
    self.tableView.delegate = self

    self.tableView.registerClass(UITableViewCell.self, forCellReuseIdentifier: cellIdentifier);
    self.tableView.reloadData();

}

override func viewWillAppear(animated: Bool) {
    // Fetch all events
    // Connect to the Event Store
    self.eventStore = EKEventStore()
    self.events = [EKEvent]()
    self.eventStore.requestAccessToEntityType(EKEntityType.Event) { (granted: Bool, error: NSError? ) -> Void in

        if granted {

            print("Access Granted")

            let fourYearsAgo = NSDate(timeIntervalSinceNow: -1 * 60 * 60 * 24 * 365 * 2)
            let predicate = self.eventStore.predicateForEventsWithStartDate(fourYearsAgo, endDate: self.endDate, calendars: nil)
            let events = NSMutableArray(array: self.eventStore.eventsMatchingPredicate(predicate))

            //TEST TO MAKE SURE EVENTS ARE BEING EXTRACTED
            print(events, "printing events")

            dispatch_async(dispatch_get_main_queue()) {
                dispatch_async(dispatch_get_global_queue(0, 0))  {
                    self.eventStore.enumerateEventsMatchingPredicate(predicate) {
                        (events:EKEvent, stop:UnsafeMutablePointer<ObjCBool>) in
                        if events.title.rangeOfString("events") != nil {
                            print("String not nil")
                            stop .memory = true
                        }
                    }
                }
            }
        } else {
            print("The app is not permitted to access events")
        }
    }
}


func numberOfSectionsInTableView(tableView: UITableView) -> Int {
    return 1
}


//MARK: UITableViewDataSource
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    //TEST PRINT EVENT COUNT
    print("event count (print) \(events.count)")

    return events.count
}


func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

    let cellIdentifier = "cell"
    let cell:UITableViewCell! = tableView.dequeueReusableCellWithIdentifier(cellIdentifier, forIndexPath: indexPath)
    let events:EKEvent! = self.events[indexPath.row]
    cell.textLabel!.text = events.title
    cell.detailTextLabel!.text = events.startDate.description
    print("event cell returned")
    return cell
}
}

1 个答案:

答案 0 :(得分:0)

你没有打电话:

self.events = events
self.tableView.reloadData()

从商店获得活动后。你应该在主队列上调用它。