EKEvents 未在 swift 中填充表视图

EKEvents not populating tableview in swift

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

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

在函数 tableView, numberOfRowsInSection 中,当我将它打印到控制台时,我的 return self.events.count 是 returning 0。我的 cellForRowAtIndexPath 似乎也没有被调用。这就是为什么 table 中没有显示任何内容吗?我在这方面完全是个菜鸟,所以我希望其中的一些内容是有道理的,我可以完全脱离球......

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

 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
}
}

你没有打电话:

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

从商店获取事件后。你应该在主队列上调用它。