Saya baru mengenal Core Data. Saya perhatikan bahwa tipe koleksi tidak tersedia sebagai tipe atribut dan ingin tahu apa cara yang paling efisien untuk menyimpan data tipe array / kamus sebagai atribut (mis. Elemen yang menyusun alamat seperti jalan, kota, dll. tidak memerlukan entitas terpisah dan lebih mudah disimpan sebagai kamus / larik daripada atribut / bidang terpisah). Terima kasih.
objective-c
ios
core-data
nsarray
nsdictionary
RunLoop
sumber
sumber
Jawaban:
Tidak ada larik "asli" atau tipe kamus di Data Inti. Anda dapat menyimpan
NSArray
atauNSDictionary
sebagai atribut yang dapat ditransformasikan. Ini akan menggunakanNSCoding
untuk membuat serialisasi array atau kamus ke suatuNSData
atribut (dan membatalkan deserialisasi saat akses). Keuntungan dari pendekatan ini adalah mudah. Kelemahannya adalah Anda tidak dapat melakukan query ke dalam array atau kamus (disimpan sebagai BLOB di penyimpanan data) dan jika koleksinya besar, Anda mungkin harus memindahkan banyak data ke / dari penyimpanan data (jika itu adalah penyimpanan data SQLite) hanya untuk membaca atau memodifikasi sebagian kecil dari koleksi.Alternatifnya adalah menggunakan Data Inti ke-banyak hubungan untuk memodelkan semantik array atau koleksi kamus. Array lebih mudah, jadi mari kita mulai dengan itu. Data inti ke-banyak hubungan benar-benar memodelkan suatu set, jadi jika Anda memerlukan fungsionalitas mirip array, Anda harus mengurutkan set tersebut (menggunakan properti yang diambil adalah cara yang mudah untuk melakukan ini) atau menambahkan atribut indeks tambahan ke entitas yang menyimpan item-item array dan mengelola indeks sendiri. Jika Anda menyimpan array yang homogen (semua entri adalah tipe yang sama), mudah untuk memodelkan deskripsi entitas untuk entitas array. Jika tidak, Anda harus memutuskan apakah akan menggunakan atribut yang dapat ditransformasikan untuk menyimpan data item atau membuat kumpulan entitas item.
Memodelkan sebuah kamus kemungkinan akan membutuhkan hubungan ke-banyak dengan sekumpulan entitas yang menyimpan kunci dan nilai. Kedua kunci dan nilai analog dengan entitas item untuk array, dijelaskan di atas. Jadi mereka bisa berupa tipe asli (jika Anda tahu mereka sebelumnya), atribut yang dapat ditransformasikan atau hubungan ke sebuah instance dari keluarga entitas tipe-spesifik.
Jika ini semua terdengar agak menakutkan, itu benar. Memilih data sewenang-wenang ke dalam kerangka kerja yang bergantung pada skema seperti Core Data itu sulit.
Untuk data terstruktur, seperti alamat, hampir selalu lebih mudah untuk menghabiskan waktu memodelkan entitas secara eksplisit (misalnya atribut untuk setiap bagian dari alamat). Selain menghindari semua kode tambahan untuk memodelkan kamus, ini membuat UI Anda lebih mudah (binding akan "berfungsi") dan logika validasi Anda dll. Jauh lebih jelas karena banyak yang dapat ditangani oleh Core Data.
Memperbarui
Pada OS X 10.7, Core Data mencakup tipe set yang dipesan yang dapat digunakan sebagai pengganti array. Jika Anda dapat menargetkan 10.7 atau lebih baru, ini adalah solusi terbaik untuk koleksi yang dipesan (seperti array).
sumber
Saya punya masalah serupa. Dalam kasus saya, saya ingin memetakan array string. Saya mengikuti saran Barry dan akhirnya berhasil. Berikut adalah beberapa kode yang terlihat (yang diharapkan akan mengklarifikasi hal-hal untuk orang lain yang mengalami ini) ...
Entitas Saya terlihat seperti ini:
Kode My Manage Object Model Code (Core Data) terlihat seperti ini:
Jadi item utama di sini adalah:
sumber