Table of Contents
Τα βασικά δεδομένα αποτελούν το πρωταρχικό πλαίσιο της Apple για τη διαχείριση του επιμένουν γραφήματος αντικειμένων σε εφαρμογές iOS. Αντί να αναγκάζουν τους προγραμματιστές να γράψουν ακατέργαστα SQL ή να διαχειριστούν τη σειρίαση αρχείων, τα δεδομένα πυρήνα παρέχουν μια υψηλού επιπέδου αντικειμενοστραφή διεπαφή που χειρίζεται τις πολυπλοκότητες αποθήκευσης, αλλαγής εντοπισμού και μοντελοποίησης δεδομένων. Κάθε προγραμματιστής iOS που συνεργάζεται με τοπικά δεδομένα πρέπει να κατανοήσει τις δυνατότητες και τις βέλτιστες πρακτικές του Core Data για την κατασκευή εφαρμογών που ανταποκρίνονται, πλούσιες σε δεδομένα χωρίς να θυσιάζουν την απόδοση.
Κατανόηση της αρχιτεκτονικής βασικών δεδομένων
Είναι ένα πλαίσιο διαχείρισης γραφημάτων αντικειμένων που μπορεί να επιμείνει δεδομένα στο δίσκο, αλλά διαχειρίζεται επίσης τις σχέσεις εντός μνήμης αντικείμενο, αναίρεση διαχείρισης, και επικύρωση. Η αρχιτεκτονική περιστρέφεται γύρω από τέσσερα βασικά συστατικά που συνεργάζονται για να σχηματίσουν αυτό που ονομάζεται συνήθως ]Στοίβα δεδομένων Core[.
Η βασική στοίβα δεδομένων
Κάθε εφαρμογή βασικών δεδομένων απαιτεί ένα συγκεκριμένο σύνολο αντικειμένων που συνδέονται με μια καθορισμένη σειρά. Η στοίβα αποτελείται από:
- Διαχειριζόμενο πλαίσιο αντικειμένου (NSManagedObjectContext): Το scratchpad όπου οι προγραμματιστές συνεργάζονται με διαχειριζόμενα αντικείμενα. Όλες οι αλλαγές συμβαίνουν μέσα σε ένα πλαίσιο πριν αποθηκευτούν στο επίμονο κατάστημα.
- Συντονιστής επίμονου καταστήματος (NSPerstantStoreCoordinator): Ενεργεί ως γέφυρα μεταξύ του πλαισίου και του(των) πραγματικού(ων) επίμονου(ων) καταστήματος.Μεσολαβεί στην πρόσβαση και εξασφαλίζει την ακεραιότητα των δεδομένων.
- Διαχειριζόμενο μοντέλο αντικειμένου (NSManagedObjectModel): Περιγράφει τις οντότητες, τα χαρακτηριστικά και τις σχέσεις στο σχήμα δεδομένων. Συνήθως ορίζεται οπτικά στο αρχείο .xcdatamodled.
- Επίμονο Κατάστημα: Ο πραγματικός μηχανισμός αποθήκευσης, ο οποίος μπορεί να είναι SQLite, δυαδικός, ή in-memory. SQLite είναι η προεπιλογή για εφαρμογές παραγωγής.
Η σύγχρονη ανάπτυξη iOS χρησιμοποιεί συχνά την τάξη, η οποία δημιουργεί αυτόματα και ρυθμίζει ολόκληρη τη στοίβα. Αυτό αφαιρεί το λεβητοστάσιο και μειώνει την πιθανότητα λανθασμένης διαμόρφωσης.
⁇ βασικών δεδομένων στο Έργο σας
Η προσθήκη δεδομένων πυρήνα σε ένα έργο iOS απαιτεί αρκετά εσκεμμένα βήματα, καθένα από τα οποία χτίζει το θεμέλιο για τη διαχείριση δεδομένων. Η διαδικασία ξεκινά με τη δημιουργία ενός αρχείου μοντέλου δεδομένων, στη συνέχεια, τον καθορισμό των οντοτήτων σας, και τελικά την ενσωμάτωση της στοίβας με τον κύκλο ζωής της εφαρμογής σας.
Δημιουργία του μοντέλου δεδομένων
Ξεκινήστε προσθέτοντας ένα νέο αρχείο στο έργο σας Xcode χρησιμοποιώντας το Data Model πρότυπο (επέκταση .xcdatamodled). Σε αυτό τον οπτικό επεξεργαστή, ορίζετε οντότητες (ισοδύναμες με πίνακες), τα χαρακτηριστικά τους (στήλες), και τις σχέσεις τους με άλλες οντότητες. Μπορείτε επίσης να καθορίσετε τύπους δεδομένων, προκαθορισμένες τιμές, κανόνες επικύρωσης, και επιλογές ευρετηρίασης για τη βελτιστοποίηση της απόδοσης ερωτημάτων.
Καθορισμός Οντοτήτων και Σχέσεων
Κάθε οντότητα αντιπροσωπεύει ένα είδος αντικειμένου που διαχειρίζεται η εφαρμογή σας, όπως ένας χρήστης, μια εργασία, ή το προϊόν. Χαρακτηριστικά καθορίζουν τα χαρακτηριστικά της οντότητας (όνομα, τιμή, ημερομηνία, κ.λπ.). Οι σχέσεις συνδέουν οντότητες, επιτρέποντας στα βασικά δεδομένα να παρακολουθούν γραφήματα αντικειμένων και να αναπαράγουν αυτόματα διαγραφές ή ενημερώσεις. Για παράδειγμα, μια οντότητα ⁇ Person ⁇ μπορεί να έχει μια σχέση ενός προς-πολλά με ⁇ PhoneNumber ⁇ οντότητες, τις οποίες τα βασικά δεδομένα μπορούν να πάρουν προς οποιαδήποτε κατεύθυνση.
Κατά το σχεδιασμό των σχέσεων, να δώσει προσοχή στον διαγραφή κανόνα[[LFT:1]]. Επιλογές περιλαμβάνουν Nullify, Cascade, και Deny. Επιλέγοντας το λάθος κανόνα μπορεί να οδηγήσει σε απροσδόκητη απώλεια δεδομένων ή ορφανά αρχεία. Cascade είναι συχνά κατάλληλο για σχέσεις γονέα-παιδιού, ενώ Nullify λειτουργεί καλά για προαιρετικές ενώσεις.
Δημιουργία υποτάξεων NSManagedObject
Μόλις ολοκληρωθεί το μοντέλο της οντότητας σας, ο Xcode μπορεί να δημιουργήσει αυτόματα Swift κατηγορίες για κάθε οντότητα. Αυτές οι υποκλάσεις κληρονομούν από [[LFT:1]] και περιλαμβάνουν τις ιδιότητες και τις σχέσεις που ορίσατε. Ξεκινώντας με το Xcode 8, η συνιστώμενη προσέγγιση είναι να επιλέξετε ⁇ Κωδικός ⁇ όπως [[LFT:0]]Ο ορισμός κλάσης[[LFT:1]] (προκαθορισμένο), το οποίο διατηρεί τα δημιουργημένα αρχεία στο φάκελο των παράγωγων δεδομένων. Εναλλακτικά, μπορείτε να επιλέξετε ⁇ Εγχειρίδιο/Μη ⁇ και να δημιουργήσετε τις δικές σας υποκλάσεις, χρήσιμες κατά την προσθήκη προσαρμοσμένων μεθόδων ή υπολογιστικών ιδιοτήτων.
Εκτέλεση πράξεων CRUD
Με τη στοίβα στη θέση της, μπορείτε να εισάγετε, να φέρετε, να ενημερώσετε και να διαγράψετε τα αντικείμενα που διαχειρίζεται χρησιμοποιώντας [[LFT:2]]. Όλες οι λειτουργίες πρέπει να εκτελούνται στο πλαίσιο, και οι αλλαγές επιμένουν μόνο μετά από μια επιτυχημένη [[LFT:3] κλήση.
Δημιουργία και αποθήκευση αντικειμένων
Για να εισάγετε ένα νέο αντικείμενο, χρησιμοποιήστε και στη συνέχεια ρυθμίστε τις ιδιότητές του. Μετά από όλες τις αλλαγές, καλέστε . Πάντα τύλιγμα save calls in a block to handling braps chartyly, ειδικά κατά τη διάρκεια ενεργειών που ξεκίνησαν από το χρήστη.
Ανάκτηση δεδομένων με προκαθορισμένα και ταξινομημένα περιγραφείς
είναι ο κύριος μηχανισμός για την ερώτηση αντικειμένων. Μπορείτε να συγκρατήσετε τα αποτελέσματα χρησιμοποιώντας [[LFT:8]] (π.χ. [[LFT:9]]) και τα αποτελέσματα παραγγελίας με [[LFT:10]]. Τα βασικά δεδομένα υποστηρίζουν επίσης σύνθετα κριτήρια, υποκλειδώσεις και σχέσεις με ανυπομονησία. Για μεγάλα σύνολα δεδομένων, πάντα να περιορίζετε το μέγεθος παραλαβής με [[LFT:11]] και να σκέφτεστε τη χρήση [[LFT:12] για τη μείωση της χρήσης μνήμης.
Ενημέρωση και Διαγραφή
Η ενημέρωση ενός αντικειμένου είναι τόσο απλή όσο η τροποποίηση των ιδιοτήτων του στο πλαίσιο· τα βασικά δεδομένα παρακολουθούν τις αλλαγές αυτόματα. Για να διαγράψετε, καλέστε [[[LFT:13]]]. Θυμηθείτε να αποθηκεύσετε το πλαίσιο μετά. Για διαγραφές παρτίδων, χρησιμοποιήστε [[LFT:14]] το οποίο λειτουργεί απευθείας στο επίμονο κατάστημα χωρίς φόρτωση αντικειμένων στη μνήμη, βελτιώνοντας δραματικά την απόδοση.
Βέλτιστες πρακτικές για τα δεδομένα πυρήνα παραγωγής-έτοιμη
Ακόμα και μια καλά διαμορφωμένη στοίβα δεδομένων πυρήνα μπορεί να γίνει ένα σημείο συμφόρησης ή πηγή σφαλμάτων αν δεν χειριστεί προσεκτικά.
Ασφάλεια και συνέπεια νημάτων
Τα πλαίσια δεδομένων πυρήνα δεν είναι προκαθορισμένα με ασφάλεια νημάτων. Ποτέ μην μοιράζεστε ένα πλαίσιο μεταξύ των νημάτων. Αντ' αυτού, χρησιμοποιήστε τη μέθοδο επί [[LFT:16]] για να δημιουργήσετε ένα πλαίσιο ιδιωτικής ουράς για λειτουργίες φόντου. Όταν έχετε πρόσβαση σε αντικείμενα στο κύριο νήμα, χρησιμοποιήστε [[LFT:17]]] ή [[LFT:18]] για να εξασφαλίσετε περιορισμό νημάτων. Για το SwiftUI, το [[LFT:19]] περιτύλιγμα ιδιοκτησίας παρατηρεί αυτόματα αλλαγές στο κύριο πλαίσιο, αλλά τα βαριά συρόμενα θα πρέπει να εξακολουθούν να εκφορτώνονται σε πλαίσια φόντου.
Έκδοση και Μετανάστευση
Καθώς εξελίσσεται η εφαρμογή σας, το μοντέλο δεδομένων σας θα αλλάξει ⁇ προσθέτοντας χαρακτηριστικά, μετονομάζοντας οντότητες ή τροποποιώντας σχέσεις. Τα δεδομένα πυρήνα υποστηρίζουν δύο τύπους μετανάστευσης: [[LFT:0]]ελαφριά μετανάστευση[[LFT:1]] και [[LFT:2]] τελωνειακή μετανάστευση[[[LFT:3]]. Ελαφριά μετανάστευση χειρίζεται απλές αλλαγές (προσθέτοντας ιδιότητες, αλλάζοντας προαιρετικότητα, μετονομασία ιδιοτήτων με αναγνωριστικό) αυτόματα αν περάσετε επιλογές κατά την προσθήκη του καταστήματος. Για σύνθετους μετασχηματισμούς, δημιουργήστε ένα μοντέλο χαρτογράφησης και υλοποιήστε [[LFT:20]] υποκατηγορίες. Πάντα δοκιμάζετε τις μεταναστεύσεις διεξοδικά, καθώς αποτυχημένες μεταναστεύσεις μπορούν να διαφθείρουν δεδομένα χρήστη.
Βελτιστοποίηση απόδοσης
Η αποτελεσματική απόδοση δεδομένων πυρήνα ξεκινά με το σχεδιασμό του μοντέλου δεδομένων. Χρησιμοποιήστε indexes σε χαρακτηριστικά που εμφανίζονται συχνά σε προκαθορισμένα. Αποφύγετε την ανάκτηση ολόκληρων γραφημάτων αντικειμένων όταν απαιτείται μόνο ένα υποσύνολο· αντ 'αυτού, χρησιμοποιήστε ] και . Υποστήριξη δεδομένων πυρήνα αποτυχίες, όπου οι ιδιότητες ενός αντικειμένου δεν φορτώνονται μέχρι την πρόσβαση. Μπορείτε να προκαταλάβετε σχέσεις με [ για να αποφύγετε την ⁇ αποτυχία-πυρόλυση ⁇ πάνω από τα ύψη κατά τη διάρκεια της κύλισης της επιτραπέζιας προβολής. Για διαβασμένο ⁇ μόνο δεδομένα, εξετάστε τη χρήση φέρνει ότι επιστρέφει λεξικά αντί για πλήρη διαχειριζόμενα αντικείμενα.
Χειρισμός σφαλμάτων
Κάθε ανάκτηση, αποθήκευση και διαγραφή λειτουργίας μπορεί δυνητικά να αποτύχει. Πάντα να περικλείετε αυτές τις κλήσεις σε [[LFT:25]] μπλοκ και να παρουσιάζετε σημαντικά μηνύματα σφάλματος στον χρήστη. Αποθήκευση αποτυχιών συμβαίνουν συχνά λόγω σφαλμάτων επικύρωσης ή παραβιάσεων περιορισμών, έτσι να επιθεωρήσετε προσεκτικά τα σφάλματα. Τα αντικείμενα λάθους του πυρήνα περιέχουν πολλαπλά υποκείμενα σφάλματα, τα οποία μπορείτε να επαναλάβετε μέσω για να παρέχουν συγκεκριμένες ανατροφοδότηση. Για τις εργασίες παρτίδας, χειριστείτε το [[LFT:26] κατάλληλα ⁇ σημειώστε ότι η παρτίδα διαγράφει δεν καταρρεύσει αυτόματα, έτσι μπορεί να χρειαστεί να χειριστείτε χειροκίνητα τα σχετικά αντικείμενα.
Ενσωμάτωση βασικών δεδομένων με το SwiftUI
Το περιτύλιγμα [[LFT:27]] παρατηρεί αυτόματα το κύριο πλαίσιο και ανανεώνει την προβολή όταν τα δεδομένα αλλάζουν. Μπορείτε να ρυθμίσετε τους περιγραφείς ταξινόμησης και να προδιαγράψετε απευθείας στη δήλωση ιδιοκτησίας. Για περισσότερο κοκκώδη έλεγχο, εγχέετε το πλαίσιο του αντικειμένου στο περιβάλλον χρησιμοποιώντας [[LFT:28]]. Όταν εργάζεστε με το `@Object` ή το ‘@StateObject` για ένα μοντέλο προβολής, βεβαιωθείτε ότι το μοντέλο προβολής κατέχει αναφορά σε ένα πλαίσιο φόντου εάν εκτελεί βαριές λειτουργίες.
Το SwiftUI απλοποιεί επίσης τη διαχείριση αναίρεσης: set στο πλαίσιο, και το SwiftUI θα ενσωματωθεί αυτόματα με τις χειρονομίες αναίρεσης/επανεγκατάστασης του συστήματος.
Βασικά δεδομένα εναντίον άλλων επιλογών επιμονής
Ενώ τα Core Data είναι η πιο ώριμη και ολοκληρωμένη λύση για την τοπική αποθήκευση iOS, δεν είναι πάντα η καλύτερη επιλογή. Συγκρίνετε το με εναλλακτικές λύσεις:
- ΧρήστηςΠροκαθορισμένα: Κατάλληλο για μικρές ποσότητες προτιμήσεων χρήστη, αλλά όχι για σύνθετα ή μεγάλα δεδομένα.
- ⁇ έμ: Προσφέρει ένα απλούστερο API και αυτόματες αντιδραστικές ενημερώσεις, αλλά προσθέτει μια εξάρτηση και δεν ενσωματώνεται τόσο βαθιά με το SwiftUI.
- Raw SQLite: Δίνει μέγιστο έλεγχο και απόδοση για πολύ μεγάλα σύνολα δεδομένων ή σύνθετα ερωτήματα, αλλά απαιτεί τη διαχείριση συνδέσεων, μεταναστεύσεων και σπείρωμα με το χέρι.
- CloudKit + Core Data: Για εφαρμογές που χρειάζονται συγχρονισμό iCloud, το γεφυρώνει τα Δεδομένα πυρήνα και το CloudKit, συγχρονίζοντας αυτόματα τις τοπικές αλλαγές στο σύννεφο.
Για τις περισσότερες τυποποιημένες εφαρμογές iOS που απαιτούν δομημένα δεδομένα, σχέσεις και δυνατότητα εκτός σύνδεσης, τα Core Data παραμένουν η συνιστώμενη επιλογή λόγω της απρόσκοπτης ενσωμάτωσής του με την πλατφόρμα και τη συνεχή υποστήριξη της Apple.
Συμπέρασμα
Τα βασικά δεδομένα παρέχουν ένα σύστημα διαχείρισης γραφημάτων αντικειμένων που αφαιρεί τις πολυπλοκότητες της διαρκούς αποθήκευσης, της παρακολούθησης αλλαγών και της διαχείρισης σχέσεων. Κατανοώντας την αρχιτεκτονική του ⁇ από το πλαίσιο του αντικειμένου που διαχειρίζεται μέχρι το επίμονο δοχείο ⁇ και ακολουθώντας αποδεδειγμένες πρακτικές για τη σύγκλιση, την απόδοση και τον χειρισμό σφαλμάτων, οι προγραμματιστές μπορούν να κατασκευάσουν εφαρμογές που είναι τόσο στιβαρές και ανταποκρίνονται.
Για περαιτέρω μελέτη, συμβουλευτείτε τον Apple Core Data documentation, τον Οδηγός Προγραμματισμού Δεδομένων Κορεσμένων Δεδομένων], και κοινοτικούς πόρους όπως Τα Βασικά Δεδομένα του Ρέι Βέντερλιχ από τους Tutorials] για ασκήσεις χεριών ⁇ σε ασκήσεις και βαθύτερες γνώσεις σε προηγμένα θέματα όπως η μετανάστευση και η σύμπτωση.