2016-09-07 8 views
1

毎日のイベントをテーブルビューに取り込もうとしています。私は接続を作った。 (データソース、デリゲート、テーブルビュー)しかし、イベントの値は0を返しています。 残念です。私は少し助けが必要です。テーブルビューへのイベント投入(スウィフト)

ここに私のコードです。

輸入のUIKit インポートEventKit 輸入EventKitUI

クラスMainViewController:の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() 
    automaticallyAdjustsScrollViewInsets = false 


    self.tableView.dataSource = self 
    self.tableView.delegate = self 

    self.tableView.registerClass(UITableViewCell.self, forCellReuseIdentifier: cellIdentifier); 
    //self.tableView.reloadData() 
    self.eventStore = EKEventStore() 

    fetchEvents { (arr:[EKEvent]) in 
     print(arr) 
     self.events = arr 
     //reload table 
    } 
    self.tableView.reloadData() 
} 

func fetchEvents(completed: ([EKEvent]) ->()) { 
    eventStore!.requestAccessToEntityType(EKEntityType.Event, completion: { 
     granted, error in 
     let startDt = NSDate(timeIntervalSinceNow: -24 * 60 * 60); 
     let predicate = self.eventStore!.predicateForEventsWithStartDate(startDt, endDate: NSDate(), calendars: nil) 
     let events = self.eventStore!.eventsMatchingPredicate(predicate) 
     completed(events) 
    }) 
} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 

} 

@IBAction func onLoadListButtonClicked(sender: AnyObject) 
{ 
    self.performSegueWithIdentifier("LoadTheList", sender: nil) 
} 



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 
} 

}

答えて

1

問題は、あなたの開始日が一日先にあるNSDate(timeIntervalSinceNow: 24 * 60 * 60)であると終了日は現在の日付です。要するに、明日のイベント開始をチェックして今日終了します)

イベントを昨日開始して今日終了するには、次の方法を使用してください。さらに使用するには、​​を以前の日付に変更してください。

func fetchEvents(completed: (NSMutableArray) ->()) { 

    eventStore!.requestAccessToEntityType(EKEntityType.Event, completion: { 
     granted, error in 
     let startDt = NSDate(timeIntervalSinceNow: -24 * 60 * 60); 
     let predicate = self.eventStore!.predicateForEventsWithStartDate(startDt, endDate: NSDate(), calendars: nil) 
     let events = NSMutableArray(array: self.eventStore!.eventsMatchingPredicate(predicate)) 
     completed(events) 
    }) 
} 

編集

コールこのよう:あなたのコメントを1として

fetchEvents { (arr:NSMutableArray) in 
      print(arr) 
      //reload your table 
     } 
+0

はありがとうございました! この機能はどこで使うべきですか? viewdidloadに?申し訳ありませんが、私は迅速に新しいです。 – sashatheitguy

+0

はい、これはviewDidLoad – Shardul

+0

でこれを使用できます。私はこのようにviewdidloadで関数を呼び出すことがありました。 self.functionname() 今、私はこれを行うことができませんでした。 self.fetchEvents() "呼び出し中のパラメータ#1の引数がありません"という問題があります。 私はこれを試しています。 self.fetchEvents(終了:(NSMutableArrayの) - >()){ }それは – sashatheitguy

0

は、私はそのブレークポイントの問題だと思うが、私はブレークポイントを入れていません。それはだいたい です。 imgur.com/a/nQGo1 imgur.com/a/MUb4i - 2分前

私はそのviewWillAppearメソッドを削除し、のviewDidLoadでfetchEvents関数呼び出しの上self.eventStore = EKEventStore()を追加するには、あなたのコードを見ていたバーボン。

もう1つ重要なポイントはarrからself.eventsに割り当ててから、テーブルをリロードします。私は、次の方法の使用の戻り値の型が変更されました:

方法:

func fetchEvents(completed: ([EKEvent]) ->()) { 
    eventStore!.requestAccessToEntityType(EKEntityType.Event, completion: { 
     granted, error in 
     let startDt = NSDate(timeIntervalSinceNow: -24 * 60 * 60); 
     let predicate = self.eventStore!.predicateForEventsWithStartDate(startDt, endDate: NSDate(), calendars: nil) 
     let events = self.eventStore!.eventsMatchingPredicate(predicate) 
     completed(events) 
    }) 
} 

メソッドの呼び出し:

fetchEvents { (arr:[EKEvent]) in 
     print(arr) 
     self.events = arr 
     //reload table 
    } 
+0

ありがとうございました。それは働いている。 (問題なし) しかし、私のテーブルビューはカレンダーにイベントをロードしません。 (私は今日のテストイベントがあります) http://imgur.com/a/InvCs – sashatheitguy

+0

'リロードテーブル'の代わりにテーブルリロードコードを追加します。 – Shardul

+0

私はそれを取得しません。それは "self.tableview.reloadData()"か、ここでどのような種類のリロードコードですか? 何か不足していますか? – sashatheitguy

関連する問題