2016-06-08 7 views
1

Я новичок в кодировании и быстроте. Я пытаюсь сделать простое приложение для встречи, чтобы помочь с моим медицинским планированием. Это моя первая попытка переполнения стека: 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 
} 
} 

ответ

0

Вы не называли:

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

После того, как вы получите события из магазина. Вы должны вызвать это в главной очереди.

+0

Спасибо @srvv за ваш ответ, я получаю сообщение об ошибке (не могу присвоить значение, чтобы ввести «NSMutableArray», чтобы ввести «[EKEvent]»), если я сделаю это. Я назвал это не в том месте? Благодарю. – Jnc

+0

try 'self.events = events as! [EKEvent] ' или вы можете напрямую назначить ' self.events = self.eventStore.eventsMatchingPredicate (предикат) ' – srvv

+0

Хотя 'NSMutableArray' является подклассом' NSArray' swift, генерирует предупреждение при передаче его в swift 'Array', что он всегда будет терпеть неудачу. Чтобы обойти это, вы можете использовать 'self.events = events.copy() как! [EKEvent] ' – srvv