Anfänger: Wie stelle ich meine Daten in der App bereit ?

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

  • Anfänger: Wie stelle ich meine Daten in der App bereit ?

    Hallo liebes Forum,
    dieses ist mein erster Beitrag in diesem Forum, nachem ich hier bereits einige Zeit still lese.

    Ih schreibe gerade eine Trainingsapp und dort habe ich bereits erfolgreich CoreData eingebunden. Dort kann ich Daten hinterlegen und auslesen.

    Jetzt möchte ich Trainingspläne fest hinterlegen. Diese Daten sollen berits beim ersten Programmstart zur Verfügung stehen.

    Ich hab jetzt lange nach einem Weg gesucht, um die DB, welche ja in mySQl läuft zu öffnen. Die DB kann ich auch manipulieren, aber wie kriege ich dann
    die Veränderten Daten zurück in mein Projekt?

    Wenn ich hier total auf einem falschen Weg bin, dann schreibt mir das bitte.
    Wie macht ihr dann denn, wenn ihr der App Daten mirgeben wollt?

    Würde mich sehr über Antworten freuen, hab schon einige Zeit gesucht.
    Grüße,
    Micha
  • Hi Micha,

    Willkommen hier im Forum!

    MBra771 schrieb:


    Wenn ich hier total auf einem falschen Weg bin, dann schreibt mir das bitte.
    Wie macht ihr dann denn, wenn ihr der App Daten mirgeben wollt?
    "Unter der Haube" im Core Data Store Änderungen vorzunehmen, ist die Anleitung zum Unglücklichsein: Dieser Schicht ist ein "Implementierungsdetail" ... Du kannst Dich überhaupt nicht darauf verlassen, dass Dein Weg morgen noch funktioniert, da Apple die Umsetzung von heute auf morgen (und ohne öffentlicher Information) ändern kann. Tu' das nicht!

    Solltest Du Core Data mit Cloud Kit verwenden, kannst Du einen öffentlich Data Store verwenden, aus dem z. B. die allgemeinen Trainingspläne gelesen oder - wenn sie individuell verändert werden - kopiert werden. Hier ist z. B. ein Video von Apple zu dem Thema.

    Falls Du (vorerst) nur mit lokalen Daten agierst, würde ich eine Export- / Import-Funktion Deiner Daten vorsehen. Ehrlich gesagt würde ich dies immer programmieren, wenn ich mit CD arbeite, denn Du kannst so in Deiner App z. B. auch die Möglichkeit des Sharens oder Backup-/Restore-Funktionen anbieten. Ermögliche beispielsweise den JSON-Export/-Import eines Trainingsplans, dann lieferst Du die Pläne im ersten Schritt mit dem App-Bundle als Resource aus und importierst diese bei Programmstart - falls noch keine Daten vorliegen. In einer späteren Version kannst Du dann die JSONs auf einem Web-Server hinterlegen und somit unabhängig von App-Updates aktualisieren.

    Vielleicht hilft Dir dieser Thread bzgl. JSON-Import-/Export von Core Data.

    Mattes
    Diese Seite bleibt aus technischen Gründen unbedruckt.
  • Also wenn CoreData in den letzten Jahren nicht noch einmal fundamental verschlimmbessert wurde, läuft mySQL auf einem Server, und nicht in der App…
    Ansonsten kann man Daten in beliebiger Form in einem Backend hinterlegen oder direkt in der App einbinden: Wenn es wenig ist, XML oder JSON, spätestens bei einem MB würde ich binär speichern.
  • Vielen lieben Dank für die Antworten,
    Also, ich merke schon, das ich das CoreData Modell lieber in Ruhe lasse.
    Nur der Weg über einen externen DB Browser schien mir einleuchtend und so etwas hatte ich schon mal gemacht.
    Soo viele Daten sind es nicht. Ich weiß nicht, ob sich da der Import von JSON lohnt.

    Wie könnte ich denn in der App die Daten bereit stellen? Ich steige da nicht durch und es gibt so viele Möglichkeiten:

    Arry / Classen / Item ... je mehr ich lese, des du unsicherer werde ich mir.

    Ich will eigentlich nur so etwas hinterlegen:

    10 Sekunden Nächste Übung Burpies
    40 Sekunden Übung Burpies
    10 Sekunden Pause
    40 Sekunden Hampelmann
    ...
    usw.

    Dabei möchte ich die "kleinen" und "großen" Pausen frei anpassen (also die Sekunden) , je nach Trainingsstand.

    Von diesen Trainings soll es dann so etwa 20 bis 30 Stück geben mit verschiedenen Übungen.

    Bitte entschuldigt diese Anfängerfrage, ihr lacht euch sicherlich innerlich tod,
    aber macht nix, besser als weinen. ;)

    Würde mich trotzdem über eure Antworten freuen.
    Grüße,
    Micha
  • MBra771 schrieb:

    Wie könnte ich denn in der App die Daten bereit stellen? Ich steige da nicht durch und es gibt so viele Möglichkeiten:
    Ich finde, Du bist mit CD schon gut unterwegs: Natürlich könntest Du auch eine eigene Objektklasse erstellen und diese anders - z. B. per Plists - persistieren. Aber warum? So hast Du eine (von Apple) optimierte Lösung, die auch mit komplexeren Szenarien klar kommt ... vielleicht später nützlich.

    Ein JSON-Import / -Export lohnt sich m. E. immer: Es sind nur zwei (kleine) Methoden pro Managed Objekt, und schon kannst Du mit nur einem Aufruf ein "Stamm-Objekt" speichern oder einen neuen CD-Objektgraphen erstellen: Ausserdem eröffnet es Dir weitere Möglichkeiten, wie beispielsweise das Sharen per AirDrop ... das ist gut investierte Zeit.

    Vielleicht schaust Du einmal in mein Code-Beispiel im oben zitierten Thread.

    Mattes

    Edit: Aus CD liest Du dann per Fetch - eigenem oder des NSFetchResultControllers - und bekommst das Ergebnis als Array von Managed Objects.
    Diese Seite bleibt aus technischen Gründen unbedruckt.
  • t-no schrieb:

    Wenn es wenig ist, XML oder JSON, spätestens bei einem MB würde ich binär speichern.
    Das sehe ich anders: Ich exportiere >7.000 Objekte mit Relationen, Lookup-Listen etc. in ein JSON von knapp 10 MB ... problemlos. Nur die (enthaltenen) Bilder liegen extern und werden über eine (relative) Pfadbezeichnung referenziert.

    Den Overhead der JSON-Struktur nehme ich in Kauf, um ein Dateiformat zu haben, das ich jederzeit auf anderen Plattformen und mit anderen Entwicklungsumgebungen lesen könnte. Im Falle eines Datenverlustes wegen eines "Vendor-Lock-ins" risse mir mein Hauptkunde (meine Frau) den Kopf ab :D

    Mattes
    Diese Seite bleibt aus technischen Gründen unbedruckt.

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

  • Hallo Mattes,
    erst ein mal vielen Dank für die Mühe, die du dir mit mir gibst.

    Ich werde das Beispiel oben mal durcharbeiten, glaube aber, dass ist doch schon etwas hoch für mich.

    Wenn ich dich recht verstehe, dann sollte ich meine Trainingspläne in ein JSON File packen und dieses beim ersten Appstart in CD importieren.
    Anschließend dann per Fetch die einzelnen Pläne auslesen.


    Wenn ich mal so weit bin, dann sollte der Rest einfach sein, da ich beim Fetch ja filtern und sortieren lassen kann.

    Habe ich dich richtig verstanden? ?(
  • MyMattes schrieb:

    Das sehe ich anders: Ich exportiere >7.000 Objekte mit Relationen, Lookup-Listen etc. in ein JSON von knapp 10 MB
    Je nachdem, was genau man speichert, kann man ein MB Binärdaten auch problemlos auf weit über 10MB JSON aufblasen — und Binärdaten schreibt man ja auch nicht Bit für Bit von Hand, sondern exportiert den ganzen Kram.
    Auch wenn Bandbreite, Platz und Performance heutzutage großzügig verschwendet wird: Wenn man keine echten Vorteile dafür bekommt, kann man sein eigenes Zeug auch schlank und sparsam bauen.
  • t-no schrieb:

    Je nachdem, was genau man speichert, kann man ein MB Binärdaten auch problemlos auf weit über 10MB JSON aufblasen [...] Wenn man keine echten Vorteile dafür bekommt, kann man sein eigenes Zeug auch schlank und sparsam bauen.
    Da hast Du natürlich recht: Beispielsweise eh schon binäre Inhalte blasen ein JSON extrem auf ... und dessen "geschwätziges" Textformat kann man perfekt zippen, um nicht unnötigen Platz zu belegen.

    Letztlich sollte man jede Lösung bewusst und mit Augenmass wählen.

    Mattes
    Diese Seite bleibt aus technischen Gründen unbedruckt.
  • MBra771 schrieb:

    Hallo Mattes,
    erst ein mal vielen Dank für die Mühe, die du dir mit mir gibst.

    Ich werde das Beispiel oben mal durcharbeiten, glaube aber, dass ist doch schon etwas hoch für mich.

    Wenn ich dich recht verstehe, dann sollte ich meine Trainingspläne in ein JSON File packen und dieses beim ersten Appstart in CD importieren.
    Anschließend dann per Fetch die einzelnen Pläne auslesen.


    Wenn ich mal so weit bin, dann sollte der Rest einfach sein, da ich beim Fetch ja filtern und sortieren lassen kann.

    Habe ich dich richtig verstanden? ?(
    Ich habe mal massig Trainingspläne in eine Firebase Datenbank per JS importiert und die Datensätze dem Entwickler so für eine App zur Verfügung gestellt - im übrigen auch für ne Sportplan-/Fitnessplan App.
    Wäre auch eine Überlegung für dich wert.

    Du erstellst dir ein UserObjekt - was du ja sowieso schon hast - und speicherst dort für jeden Tag bzw. die Anzahl der Tage den entsprechenden Trainingsplan.

    Beim App Start liest du dann einmal die Daten aus.
    Wie MyMattes schon sagt, es ist (wenn du es nicht komplett übertreibst) eine kleine JSON die du dann beim App Start downloaden musst.

    Lg