2016-09-07 1 views
1

Ich versuche, meine täglichen Ereignisse in Tableview zu bevölkern. Ich habe die Verbindungen hergestellt. (Datenquelle, Delegat und Tabellenansicht) Aber der Wert des Ereignisses gibt 0 zurück. Entschuldigung, wenn das woanders gefragt wurde. Ich brauche ein wenig Hilfe.Ereignisse in Tableview einlagern (Swift)

Hier ist mein Code.

Import UIKit Import EventKit Import EventKitUI

Klasse 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 
} 

}

Antwort

1

Ausgabe ist Ihr Startdatum NSDate(timeIntervalSinceNow: 24 * 60 * 60) ist, die einen Tag vor und Ihr Enddatum ist das aktuelle Datum; Kurz gesagt, Sie überprüfen das Ereignis beginnt morgen und endet heute;)

Verwenden Sie einfach folgende Methode, um Ereignisse gestern gestartet und endet heute. Für weitere Verwendung ändern Sie einfach die startDt zu einem früheren Datum.

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) 
    }) 
} 

bearbeiten

Rufen Sie diese als:

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

danke! Können Sie sagen, wo sollte ich diese Funktion verwenden? zur Anzeigedidload? Tut mir leid, ich bin neu in Swift. – sashatheitguy

+0

Ja, Sie können dies in viewDidLoad verwenden – Shardul

+0

Entschuldigung für viele Fragen. Ich habe so eine Funktion in viewdidload aufgerufen. self.functionname() aber jetzt konnte ich das nicht tun. self.fetchEvents() "fehlendes Argument für Parameter # 1 im Aufruf" Problem, das ich habe. Ich versuche das. self.fetchEvents (abgeschlossen: (NSMutableArray) ->()) { } aber nicht – sashatheitguy

0

Wie pro Ihr Kommentar:

Ich denke, es ist ein Haltepunkt Problem, aber ich habe nicht einen Haltepunkt setzen. Es ist so seltsam. imgur.com/a/nQGo1 imgur.com/a/MUb4i - Bourbon 2 Minuten vor

ich auf dem Code ausgesehen hatte, dass viewWillAppear Verfahren entfernen und hinzufügen self.eventStore = EKEventStore() über den fetchEvents Funktionsaufruf in viewDidLoad.

Noch ein wichtiger Punkt zuweisen zu und dann die Tabelle neu laden. Ich habe mich verändert nur den Rückgabetyp der Methode Gebrauch folgende:

Methode:

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) 
    }) 
} 

Methodenaufruf:

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

Vielen Dank. Es funktioniert. (ohne Probleme) Aber meine Tabellenansicht lädt keine Ereignisse in meinem Kalender. (Ich habe ein Test-Event für heute.) http://imgur.com/a/InvCs – sashatheitguy

+0

Anstatt '// Reload-Tabelle' fügen Sie Ihre Tabelle neu laden Code – Shardul

+0

Ich verstehe es nicht. ist es "self.tableview.reloadData()" oder welche Art von Reload-Code hier? Fehle ich etwas? – sashatheitguy