我是编码和快速的新手。我正在尝试制作一个简单的预约应用程序来帮助我的医疗计划。这是我第一次尝试堆栈溢出问题: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
}
}
答案 0 :(得分:0)
你没有打电话:
self.events = events
self.tableView.reloadData()
从商店获得活动后。你应该在主队列上调用它。