Я новичок в кодировании и быстроте. Я пытаюсь сделать простое приложение для встречи, чтобы помочь с моим медицинским планированием. Это моя первая попытка переполнения стека: s, я кодирую в Swift. Мне удалось получить доступ к приложению в хранилище событий, и я смог распечатать все события из всех календарей в консоли, но я не могу отображать события в своей таблице. Я пытался найти, если у кого-то еще была эта проблема, но я все еще не смог найти решение, которое работало в моем проекте. Извините, если это было задано еще где.EKEvents не заполняет таблицу в 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
}
}
Спасибо @srvv за ваш ответ, я получаю сообщение об ошибке (не могу присвоить значение, чтобы ввести «NSMutableArray», чтобы ввести «[EKEvent]»), если я сделаю это. Я назвал это не в том месте? Благодарю. – Jnc
try 'self.events = events as! [EKEvent] ' или вы можете напрямую назначить ' self.events = self.eventStore.eventsMatchingPredicate (предикат) ' – srvv
Хотя 'NSMutableArray' является подклассом' NSArray' swift, генерирует предупреждение при передаче его в swift 'Array', что он всегда будет терпеть неудачу. Чтобы обойти это, вы можете использовать 'self.events = events.copy() как! [EKEvent] ' – srvv