2016-11-05 45 views
3

的cellForRowAtIndexPath不會被調用(numberOfRowsInSection是),使用的UITableViewController具有以下方式:的cellForRowAtIndexPath從未稱爲的UITableViewController

import UIKit 
import EventKit 

class EventThisWeekController: UITableViewController { 

    var eventStore: EKEventStore = EKEventStore() 
    var eventsThisWeek: [EKEvent] = [] 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     self.eventStore.requestAccessToEntityType(.Event) { 
      (granted, error) -> Void in 

      guard granted else { fatalError("Permission denied") } 

      let endDate = NSDate(timeIntervalSinceNow: 604800) 
      let predicate = self.eventStore.predicateForEventsWithStartDate(NSDate(), 
                      endDate: endDate, 
                      calendars: nil) 
      self.eventsThisWeek = self.eventStore.eventsMatchingPredicate(predicate) 
      print(self.eventsThisWeek.count) 
     } 

    } 

    override func numberOfSectionsInTableView(tableView: UITableView) -> Int { 
     return 1 
    } 

    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
     print("cellForRowAtIndexPath") 
     let cell = UITableViewCell(style: .Default, reuseIdentifier: nil) 

     cell.textLabel?.text = self.eventsThisWeek[indexPath.row].title 

     return cell 
    } 

    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
     print("numberOfRowsInSection") 
     return eventsThisWeek.count 
    } 
} 

數據源和委託被分配給該控制器和EvenThisWeekController是在主要故事板設計的類。因此,在我的應用程序表中顯示沒有任何結果。當然,eventThisWeek數組的長度不等於0.任何想法我可以如何解決它?

+0

您是否在故事板中設置了控制器的子類?另外,您是否向故事板添加了「UITableViewController」或「UIViewController」? – Fogmeister

+0

@Fogmeister是的,我在* Custom class *部分中設置了EventThisWeekController,並且我在故事板中使用的控制器是UITableViewController – jgd

+0

是否調用了numberOfRows方法? – Fogmeister

回答

3

用這個代替viewDidLoad中的代碼。

self.eventStore.requestAccessToEntityType(.Event) { 
    (granted, error) -> Void in 

    guard granted else { fatalError("Permission denied") } 

    let endDate = NSDate(timeIntervalSinceNow: 604800) 
    let predicate = self.eventStore.predicateForEventsWithStartDate(NSDate(), 
                    endDate: endDate, 
                    calendars: nil) 
    self.eventsThisWeek = self.eventStore.eventsMatchingPredicate(predicate) 
    dispatch_async(dispatch_get_main_queue(),{ 

     self.tableView.reloadData() 

    }) 
    print(self.eventsThisWeek.count) 
} 

cellForRowAtIndexPath不調用,因爲當你的觀點被加載在那個時候數組是空的,當self.eventStore.requestAccessToEntityType完全執行和負載陣列你不通知你的tableView新價值當數組中有新值時重新加載數據。

+0

這是正確的!謝謝! – jgd

+0

@jgd請閱讀下面的說明,以便您瞭解實際問題。 –

+0

啊,很好發現:) – Fogmeister

相關問題