Kalender mit Core Data

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Kalender mit Core Data

    Hi,

    ich habe ein add Event geschrieben, um einen Termin in den Kalender einzutragen. Momentan ist es so, dass das aktuelle Datum genommen wird. Ich möchte aber gerne den FScalendar nutzen. Ich habe diesen schon installiert und ich kann die Tage anwählen.

    Nun möchte ich vordefinierte Events in der Datenbank ablegen, z.B. Titel, Erinnerung, diese sollen dann beim erstellen des Termins aus der Datenbank geholt werden.

    Wie kann man das bewerkstelligen ?
  • Hallo!

    Bei der sehr knappen Beschreibung ist mir nicht klar, was du wirklich erreichen möchtest.
    Ich denke, dass du genauer beschreiben solltest, was du erreichen möchtest.
    Was ist FScalendar?
    Wie/wo hast du das "add Event" geschrieben?

    Bei Kalender würde ich ja die Daten nicht in Core Data sondern mit EventKit ablegen.
    Das nutzen vermutlich die meisten Kalender-Apps und der Anwender kann einfach
    definieren, ob er die Daten mit anderen Geräten synchronisieren möchte, was man
    anderenfalls meist selbst implementieren muss.

    Falls FScalendar eine App ist, gibt es 2 Möglichkeiten:
    1. diese nutzt ebenfalls EventKit
    2. sonst: FScalendar dokumentiert ggf. wie der Zugriff auf deren Daten möglich ist.
    In der Dokumentation oder einem Forum zu der App wirst du eher Hilfe finden als hier.

    Grüße
    Marco
  • marcoo schrieb:

    Was ist FScalendar? [...] In der Dokumentation oder einem Forum zu der App wirst du eher Hilfe finden als hier.
    Ich vermute, @Zeus23 meint diese Library auf GitHub und gebe Dir vollkommen recht: In deren Dokumentation müsste beschrieben sein, wie man sich in dessen Datenmodell oder Benutzeraktion einklinken kann, um dann entsprechende Informationen in Core Data zu speichern.

    Die Bibliothek kenne ich nicht...

    Mattes
    Diese Seite bleibt aus technischen Gründen unbedruckt.
  • Erstmal danke für die schnelle Antwort.

    Ich brauche eine Lösung, um bestimmte Schichten (Tages- Spät- und Nachtschicht) ohne viel Aufwand in den Kalender als Termin eintragen zu können. Zu jeder Schicht gibt es sieben Fahrzeuge, vier davon fahren von 06:00 - 13:00 Uhr und die anderen drei von 08:00 - 15:00 Uhr (z.B. bei einer Frühschicht). Mein Problem besteht darin, dass ich nicht alles immer wieder händisch in den Kalender eintragen möchte. Dafür möchte ich mir Vorlagen anlegen.

    Z.B. ich klicke einen Wochentag im Kalender an und dann kann ich mir ein Fahrzeug aussuchen, welches ich zu diesem Tag und Schicht besetzen muss. (Es geht um einen Dienstplan)

    Könnte ich mir so vorstellen:

    1. Datepicker (also eine Kalendertagansicht), dort wähle ich mir ein Datum aus
    2. sobald das Datum ausgewählt ist, erschienen die Fahrzeuge (dort sind die Zeiten hinterlegt von wann bis wann diese besetzt sein müssen)
    3. Fahrzeug zum Tag zuordnen und mit einen Button bestätigen.

    Kann ich mir in Xcode, ob über CoreData oder über einen anderen Weg, Vorlagen definieren, die ich dann den jeweiligen Wochentagen im Kalender zuordnen kann?

    Ich hoffe es geht daraus hervor was erreicht werden soll :)
  • Zeus23 schrieb:

    Kann ich mir in Xcode, ob über CoreData oder über einen anderen Weg, Vorlagen definieren, die ich dann den jeweiligen Wochentagen im Kalender zuordnen kann?
    Du kannst Dir mit Xcode Programme schreiben, die alles mögliche machen, unter anderem auch Kalender anzeigen, Daten wie Fahrzeug und deren Verfügbarkeit verwalten und vieles mehr ... aber Du musst es eben auch selber programmieren.

    Xcode ist keine Plattform, um irgendwas zusammen zu klicken und "mal kurz" einen Kalender zu haben, den man mit Vorlagen - was auch immer das in diesem Zusammenhang sein mag - verknüpfen kann. Es ist eine Programmierumgebung, kein Point-and-Click-Baukasten ... auch wenn Apple gerne anderes suggeriert.

    Kurz: Du kannst alles von Dir beschriebene machen, mit einer fertigen Kalender-Library oder auch komplett händisch. Aber es kann hier keine schrittweise Anleitung geben und Du musst programmieren (können oder lernen).

    Mattes
    Diese Seite bleibt aus technischen Gründen unbedruckt.
  • Ich habe nun doch einmal einen Blick auf FSCalendar geworfen. Daher weiß ich nun, dass es um iOS geht.
    Außerdem vermute ich basierend auf der Readme, dass FSCalender keine fest hinterlegte Datenquelle hat
    und der Anwendungsentwickler dafür zuständig ist. D.h. du könntest die Daten aus Core Data holen, aber genauso
    oder auch zusätzlich aus anderen Quellen (z.B. EventKit).

    Wenn ich jetzt mal von Core Data ausgehe, könntest du das z.B. wie folgt machen:
    Entity Schicht
    Start Typ Zeit (entweder Date und du verwendest nur den Zeitanteil oder z.B. integer für Minuten seit Mitternacht)
    Ende Typ Zeit
    AnzahlBenötigterFahrzeuge Typ Integer
    Montag Typ Boolean
    bis Sonntag ggf. extra Feiertag
    Mit den Wochentagen kann man abweichende Zeiten am Wochenende und Feiertagen definieren.
    Wenn die Schichten davon unabhängig sind oder nur Werktags relevant, können die Wochentage
    raus. AnzahlBenötigterFahrzeuge kann evtl. extra definiert werden.

    Entity Fahrzeug
    Name Typ String
    ggf. weitere (falls nur der Name relevant, muss dafür vielleicht keine Entity verwendet werden)

    Entity Fahrer analog zu Fahrzeug

    Entity Fahrzeugeinsatz
    Relation zum Fahrzeug (oder Name direkt)
    Relation zum Fahrer (oder Name direkt)
    Relation zu Schicht (für die Zeit)
    Datum Typ Date (für konkretes Datum)

    Was ich hier als Fahrzeugeinsatz definiert habe, ist vermutlich der Kern deiner Anwendung.
    Aber du brauchst dann noch Eingabemöglichkeiten, um die Schichten, Fahrzeuge und Fahrer
    zu definieren. Was dabei noch nicht berücksichtigt ist: Einsatz der App auf mehreren Geräten
    und Synchronisation der Daten. Dabei sollen die Daten vermutlich auch nur pro Firma/Standort
    ausgetauscht werden. Vermutlich gibt es noch weitere Aspekte, die hier noch ungenannt sind.

    Oben schriebst du:
    Fahrzeuge (dort sind die Zeiten hinterlegt von wann bis wann diese besetzt sein müssen)

    Das erscheint mir seltsam. Üblicherweise sollen Fahrzeuge doch rund um die Uhr im Einsatz sein,
    damit sie möglichst kosteneffizient genutzt werden. Vermutlich musst du dir eher um geplante und
    ungeplante Wartungszeiten Gedanken machen. Außerdem dürfte eher die zu erfüllende Dienstleistung
    relevant sein und dazu gehört vermutlich, dass zu bestimmten Zeiten X Fahrzeuge im Einsatz sind.
  • Danke für die super Antwort:

    In den meisten Kalender-Apps, muss man jede Schicht einzeln mit allen dazugehörigen Daten eingeben und das dauert ziemlich lange.
    Die Fahrzeuge haben immer die gleichen Zeiten, in denen sie besetzt werden müssen. D.H Fahrzeug 1 - 4 muss immer von 0600-1300 (Frühschicht in diesem Fall - Die Spätschicht übernimmt dann die Fahrzeuge von 1300-2300 usw....) besetzt werden. Die Fahrzeugführer werden vom Schichtleiter zugewiesen und so entsteht dann der Schichtplan.

    Die Schichten sind immer: Frühschicht, Spätschicht, Nachtschicht, schlafen und frei.

    Mir geht es einfach darum, dass ich mir im Vorfeld Vorlagen definieren kann, um die Schichten schnellstmöglich in den Kalender eintragen zu können. Das ist mir wichtig, da ich den Plan in ausgedruckter Form bekomme und eine Erinnerungsfunktion brauche :). Da ich schon mit Datenbanken gearbeitet habe, denke ich, dass man am Besten die Vorlagen mit Hilfe von Core Data anlegt - oder kann kann das Eventkit auch?

    Wenn ich also im Kalender ein Datum anwähle, muss eine Auswahl mit den zuvor angelegten Vorlagen erscheinen, aus denen ich die passende wähle und dem Tag zuordne.

    Im Kalender muss dann folgendes stehen

    01.01.2020 / Titel: Fahrzeug 1 Früh / von: 06:00 bis: 13:00 Uhr / Note: "nach Bedarf"

    Also im Datepicker wähle ich ein Datum aus
    - dann erscheinen die Fahrzeuge
    - ich treffe eine Auswahl
    - und zuletzt noch die Frage ob eine Notiz erstellt werden soll (ist aber nicht zwingend notwendig) - In der Note möchte ich mir nur speichern mit wem ich fahre
    - Abschlossen wird das alles mit einem Aktionsbutton ("Save") der die Daten in den Kalender überträgt.

    Die IOS App Kalender Z kann das alles :) habe ich heute gefunden.

    Dennoch möchte ich mir selber eine App programmieren.

    Ich weiß das dieses Projekt noch zu schwer für mich ist, da ich noch ein "Swift-Anfänger" bin - aber ich will es dennoch versuchen.

    Ich möchte mich nicht verzetteln und deswegen frage ich hier, welche Herangehensweise wohl die Beste wäre.

    FsCalendar habe ich gelöscht - ich versuche es mit Eventkit

    Danke
  • Ich habe mich nicht tiefer mit FSCalendar beschäftigt, aber so wie ich es verstanden habe, ist
    dieses Projekt nur für das User Interface da. Damit bliebe es potentiell eine sinnvolle Ergänzung.
    In EventKit kann man Termine und Erinnerungen eintragen, die in einem bestimmten Rhythmus
    wiederholt werden. Ob man da auch Vorlagen erstellen kann, weiß ich nicht. Bisher habe ich
    nur lesend auf EventKit zugegriffen. Möglicherweise kannst du dir mit einem eigenen Kalender
    helfen, in dem die App nur die Vorlagen einträgt. Diesen Kalender kannst du ja normalerweise
    ausblenden.

    Wenn man neu mit dem Programmieren generell oder in einem speziellen Bereich anfängt,
    hilft eigentlich nur Praxis. Schrittweise immer komplexere Anwendungen aufbauen! Oft gibt
    es Tutorials, die zumindest in die Grundlagen eines Themas einführen. Es hilft, wenn man sich
    mehrmals die Woche mit dem Thema beschäftigen kann.

    Meine Erfahrung mit den Frameworks von Apple ist, dass es oft genau das passende gibt, dass
    aber für mich die Einordnung und Bezeichnung nicht offensichtlich war. Da muss man dann
    oft erst einmal viel lesen. Mit dem Wissen kann man dann auch im Forum gezielter nach
    Lösungsansätzen fragen.

    Wenn du die App nur für dich nutzt, wird es vermutlich am sinnvollsten sein, zuerst alles
    fest im Programm zu definieren und dann schrittweise die Aspekte, die sich ändern können
    aus dem Programmcode zu entfernen und aus Core Data oder EventKit zu lesen. Du kannst
    erstmal beobachten, wie gut die App dir aktuell hilft und diese dann regelmäßig anpassen.
    Mit Swift und Xcode musst du sowieso zurecht kommen. Da fällt es dann bestimmt einfacher,
    die Vorlagen im Code zu hinterlegen, als Code zu schreiben, der die ermöglicht, die Vorlagen
    in anderer Form abzuspeichern. Ohne Developer Account musst du deine App sowieso nach
    ein paar Tagen neu aufspielen, weil sie sonst nicht mehr startet, und mit Account zumindest
    nach einigen Wochen.

    Vermutlich hast du schon ein wenig ausprobiert und kannst eine App mit dem Datumsfeld,
    einem SegmentControl für die Auswahl der Schicht und einem für das Fahrzeug machen.
    Dann noch das Notizfeld und der Speichern-Button. Da braucht man dann tatsächlich auch
    kein FSCalendar. Im folgenden Schritt könntest du Vorschläge für das Datum machen
    basierend auf den vorhandenen Kalendereinträgen. Danach kannst du evtl. die Fahrzeuginformationen
    konfigurierbar machen.

    Viel Erfolg!
  • Ich hab mir mal deine Anforderungen zu Gemüte geführt. Mir scheint das aktuell der falsche Weg zu sein.

    Ich würde das so machen:

    1. SwiftUI
    2. DatumsPicker
    3. FahrzeugPicker (1-4)
    4. SchichtPicker (a, b, c)
    5. Notizfeld
    6. Speichern Knöpfle


    Da brauchst du 4 State Variablen... und fertig...

    dann musst du nur noch die Werte in den Kalender übertragen.

    Das wars.

    Oder sollte ich da was falsch verstanden haben?

    Schöne Grüsse
    Wolf

    Hier noch kurz ein Code aus Git, nach 10 sec Suche....

    Quellcode

    1. func insertEvent(store: EKEventStore) {
    2. let event:EKEvent = EKEvent(eventStore: store)
    3. let startDate = Date()
    4. // 2 hours
    5. let endDate = startDate.addingTimeInterval(2 * 60 * 60)
    6. event.title = "Test Title"
    7. event.startDate = startDate
    8. event.endDate = endDate
    9. event.notes = "This is a note"
    10. event.calendar = store.defaultCalendarForNewEvents
    11. do {
    12. try store.save(event, span: .thisEvent)
    13. } catch let error as NSError {
    14. print("failed to save event with error : \(error)")
    15. }
    16. print("Saved Event")
    17. }
    Alles anzeigen
    Davor noch import EventKit

    und dann hast du alles was du brauchst.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Wolf ()