我是新來的編碼和swift。我正在嘗試製作一個簡單的預約應用程序來幫助我的醫療計劃。這是我第一次嘗試堆棧溢出問題:s,我在Swift中編寫代碼。我設法讓應用程序訪問Event商店,並且能夠將所有日曆中的所有事件打印到控制檯中,但無法將事件顯示在我的表格中。我試圖找到其他人是否有這個問題在這裏,但我仍然無法找到一個解決方案,在我的項目中工作。對不起,如果這已被問到其他地方。EKEvents不在swift中填充tableview
我已經在下面添加了我的代碼。我檢查了我的所有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
}
}
感謝@srvv爲您的迴應,我收到一個錯誤(無法指定值鍵入'NSMutableArray'鍵入'[EKEvent]')如果我這樣做。我把它叫在錯誤的地方嗎?謝謝。 – Jnc
嘗試'self.events = events as! [EKEvent]' 或者你可以直接指定 'self.events = self.eventStore.eventsMatchingPredicate(predicate)' – srvv
儘管'NSMutableArray'是'NSArray'的子類,swift在將它轉換爲swift時會產生警告它總是會失敗。 要解決您可以使用'self.events = events.copy()as! [EKEvent]' – srvv