50 Stimmen

Warum sollte ich Core Data für meine iPhone-App verwenden?

Ich arbeite gerade an meiner 2. iPhone-App und bin neugierig auf Core Data. Die Zeit für das Projekt ist begrenzt, ebenso wie meine Zeit insgesamt.

Ich bin der einzige Entwickler und ich habe das Gefühl, dass Core Data nützlich wäre, aber ich kann nicht genau erklären, warum.

Bitte entschuldigen Sie die folgende Verschleierung die App muss eine Liste von Foos von einem zentralen Server abrufen. Benutzer können dann eine Bar aus einer Liste von Bars zu den Foos hinzufügen, dann eine Baz aus einer Liste von Bazes(!?) zu der Bar hinzufügen, dann ein optionales Foto und eine Beschreibung zu der Baz hinzufügen.

Wenn der Benutzer mit seiner Arbeit zufrieden ist, drückt er auf die Schaltfläche "Synchronisieren", um seine Daten auf den zentralen Server hochzuladen.

Wie Sie sehen können, handelt es sich um eine einfache datengesteuerte Drill-Down-Anwendung, aber ich bin mir immer noch nicht sicher, ob ich die Verwendung von Core Data mit unseren zeitlichen Beschränkungen rechtfertigen kann - die Lernkurve sieht steil aus.

Wenn ich meinem Chef gegenüber argumentiere, dass wir Kerndaten verwenden sollten, welche Argumente kann ich ihm vorbringen? Auch Logikgranaten sind willkommen.

2 Stimmen

Es gibt nichts hinzuzufügen, was über das hinausgeht, was bereits gesagt wurde, aber ich wollte es erwähnen: Ich habe diese Frage auch schon einmal gestellt. Heute kann ich mir nicht mehr vorstellen, eine App ohne Core Data zu bauen. Allein die Beziehungsmodellierung ist unbezahlbar. Es ist die Mühe so sehr wert.

60voto

Tim Punkte 58529

Core Data hilft hauptsächlich bei den Nebenaspekten der Anwendung - Dinge wie Datenpersistenz, Präsentation usw. Einige Stichpunkte für Ihren Chef:

  • Core Data verwaltet die Funktionen zum Speichern und Rückgängigmachen für Sie. Es verfügt über einen persistenten Speicher, der Änderungen verfolgt und zu einer beliebigen Anzahl von Zeitpunkten (Schließen der Anwendung usw.) automatisch auf die Festplatte gespült werden kann.
  • Core Data und verwandte Klassen bieten einfache Möglichkeiten, um Ihre Entitäten in UITableViews, wie NSFetchedResultsController, zu erhalten.
  • Core Data abstrahiert viele der unübersichtlichen Dinge, mit denen Sie sich sonst selbst befassen müssten, wie z. B. Listen von Objekten, One-to-many- oder Many-to-many-Beziehungen oder Beschränkungen für Objektattribute, in eine einzige, saubere objektorientierte Schnittstelle.
  • Core Data wird mit einem schönen grafischen Objektmodell-Editor geliefert, der Ihnen helfen kann, Ihr Objekt-/Entitätsdesign zu durchdenken und zu verfeinern, während Sie arbeiten. (Er unterstützt auch die Migration, d. h., wenn Sie sich später entscheiden, dass Sie andere Attribute für Ihre Entitäten wünschen, können Sie das relativ einfach tun).

Sicherlich ist die Lernkurve etwas steil, aber die Apple-Beispiele sind großartig für den Anfang, und die Core Data-Dokumentation ist sehr vollständig und hilfreich. Sobald Sie Core Data beherrschen, wird es ein Kinderspiel sein, Ihre App zu erstellen.

8 Stimmen

Hinzu kommt, dass Core Data in vielen Fällen eine bessere Leistung als SQLite hat, sowohl was die CPU als auch was den Speicher betrifft. Die Verwendung von Batched Fetching mit Ihrem NSFetchedResultsController besteht aus einer Zeile Code, kann aber zu erheblichen Leistungssteigerungen führen. Ich habe gesehen, dass Core Data sogar handoptimierten SQLite-Code in Desktop-Anwendungen übertrifft, und ich bin sicher, dass die Leistung eine Priorität war, als ich es auf das iPhone brachte.

0 Stimmen

Die Lernkurve ist definitiv steil und hält mich davon ab, einfache Aufgaben zu erledigen, wie z. B. das Abrufen einer Liste von Produkten in der automatischen Vervollständigung auf der Grundlage der bisher eingegebenen Produktcodenummern. Ist für so etwas Einfaches die Verwendung von Core Data-Technologien erforderlich, oder reicht die Verwendung von SQLite aus? Ich hoffe nur, dass ich keine Leistungseinbußen erleide, wenn ich mich für Letzteres entscheide. Ich bin mit der Codierung im SQL-Stil vertraut und hätte beim Start alle Produkte abgerufen und dann die Produkte mit Prädikaten gefiltert, die die Menge anzeigen, die mit der bisher eingegebenen Produktnummer beginnt. Ist das der richtige Weg?

0 Stimmen

Das obige ist eine Funktionsanforderung für eine der Anwendungen, die ich erstelle, und ich verhindere die Notwendigkeit, einen Webserver zu kontaktieren, da die automatische Vervollständigung nur langsam reagieren würde, daher ist die lokale Speicherung die praktikable Option. Aber was ist für meine Zwecke besser? Dann stelle ich Szenario 2) für die Anwendung Nummer 2 vor, die lediglich die biometrischen Fingerabdruckdaten lokal in einer blob Feld x 3000 registrierte Benutzer, und wenn ein Benutzer seinen Finger auf meiner Fingerabdruckmaschine abstreicht, muss der zurückgegebene Fingerabdruck mit jeder in der DB gespeicherten Fingerabdruckvorlage abgeglichen werden. Ist Core Data hier besser oder SQLite?

8voto

justin Punkte 103032

Um CoreData nutzen zu können, müssen Sie eine ganze Reihe von Cocoa-Technologien, -Konzepten und -Mustern kennen. Die Lernkurve ist nicht wirklich steil, wenn Sie diese Dinge kennen. Wenn sie steil aussieht, würde ich es vermeiden, sie zu einem kritischen Faktor für Ihr Projekt zu machen, und dann nur während der Ausfallzeiten lernen und sie schließlich verwenden, wenn Sie sich damit auskennen. Es handelt sich definitiv nicht um eine Einsteigertechnologie; Sie benötigen eine gute Programmiergrundlage, einschließlich Cocoa-spezifischer Technologien und Konzepte. Viele Leute sehen es und denken, dass es für sie einfach sein wird, denn das wäre es auch, könnte bekommen viel umsonst. Es ist wie ein Code-Generator, fast nutzlos für jemanden, der ihn nur dazu benutzt, um genau das zu tun (Code zu produzieren), anstatt ihn geschickt als Antwort auf die Problemstellung einzusetzen.

6voto

Ian Henry Punkte 21785

Was die Lernkurve anbelangt, so glaube ich nicht, dass es so schlimm ist, wie Sie denken. Mit Apples Beispielklassen und der Standard-CoreData-Projektvorlage war ich in der Lage, eine funktionierende CoreData-App (ziemlich einfach, aber nicht trivial) an einem einzigen Nachmittag zu erstellen, und es dauerte nur ein paar Tage, in denen ich mit dem Code herumspielte, bevor ich ein wirklich gutes Verständnis für alle beweglichen Teile hatte (und das alles, während ich den Rest der App entwickelte, sodass keine Zeit mit Basteleien verschwendet wurde).

CoreData funktioniert sehr... logisch, denke ich, und es ist unglaublich praktisch. Es erspart einem eine Menge Aufwand, und ich weiß, dass es mir beim Schreiben dieser Anwendung eine Menge Zeit erspart hat. Die kurze anfängliche Investition in das Erlernen der neuen Technologie hat sich langfristig gelohnt, da ich jetzt ein so leistungsfähiges Werkzeug in meinem Halfter habe.

4voto

John R Doner Punkte 2204

Ich befinde mich immer noch im Wissensbereich von X-Code 101, aber die erste Anwendung, die ich selbst entwickelt habe, verwendete Kerndaten (nachdem ich ein gutes Tutorial gelesen hatte).

In der leeren Anwendungsvorlage ist bereits eine Menge Software enthalten, aber die eigentliche Interaktion des Programmierers mit den Datenbankfunktionen ist minimal und unkompliziert.

Probieren Sie es aus: Es ist einfacher als Sie denken.

3voto

jack Punkte 701

Ein von Core Data verwaltetes Objekt kann alle seine Daten in der Datenbank speichern und wird nur als ID im Speicher referenziert. Auf diese Weise kann Core Data viel Speicherplatz einsparen, vor allem wenn Sie viele Modelldaten haben. Wenn Sie Core Data verwenden, brauchen Sie sich keine Gedanken mehr über Speicherprobleme bei Modelldaten zu machen.

0 Stimmen

Ich bin mir nicht sicher, was genau Sie mit dieser Antwort sagen wollen, aber vielleicht sollten Sie lieber über die Fehlermöglichkeiten von Core Data sprechen. Das ist mächtiger, als einfach zu behaupten, dass ein Fetch nur ObjectIDs zurückgibt. Sie müssen sich auf jeden Fall Gedanken über Speicherprobleme machen, da Sie in Core Data starke Referenzzyklen erzeugen können, wenn Sie auf die umgekehrte Beziehung eines verwalteten Objekts zugreifen. Aus diesem Grund gibt es die Methode refreshObject:mergeChanges:.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X