Saya memiliki grafik objek data inti (terdiri dari dua entitas yang dihubungkan oleh hubungan ke banyak).
Saya penasaran, sebagai pengembang iPhone yang relatif tidak berpengalaman, apakah ada yang dapat merekomendasikan pendekatan, dan implementasi JSON yang sesuai untuk iPhone, yang memungkinkan saya untuk:
mengonversi catatan data inti menjadi string JSON (sambil mempertahankan hubungan antara entitas); dan
mengonversi string JSON kembali menjadi objek data inti (sekali lagi mempertahankan hubungan antar entitas).
Saya telah mencari, tidak berhasil, untuk contoh tutorial / kode tentang hal ini sehingga bantuan apa pun akan kami terima dengan penuh syukur.
iphone
objective-c
json
core-data
Urizen
sumber
sumber
NSJSONSerialization
developer.apple.com/library/mac/#documentation/Foundation/… stackoverflow.com/questions/6726899/nsjsonserialization-in-ios5Jawaban:
Pertama, pilih perpustakaan JSON untuk digunakan, saya pribadi suka TouchJSON tetapi beberapa lainnya di luar sana juga cukup bagus. Bagian yang rumit, meskipun tidak terlalu sulit, adalah mengubah objek yang Anda kelola menjadi struktur yang sesuai untuk konversi. Saya menulis ini dengan sangat cepat sehingga mungkin ada satu atau dua kesalahan :)
Metode yang Anda panggil adalah:
Dan implementasinya adalah sebagai berikut:
Sekarang ini rekursif sehingga Anda dapat dengan mudah menerjemahkan seluruh penyimpanan persisten Anda jika Anda tidak berhati-hati. Perhatikan hubungan Anda dan pastikan bahwa mereka hanya "turun" dari pohon objek sehingga Anda hanya mendapatkan objek yang ingin diterjemahkan.
sumber
Saya hanya ingin menunjukkan kesalahan ketik kecil, yang menyebabkan kode macet, dan mudah-mudahan ini akan menghemat beberapa menit.
Itu
NSMutableArray *dataArray = [[NSArray alloc] init]; // This should be NSMutableArray
seharusnya begitu
NSMutableArray *dataArray = [[NSMutableArray alloc] init];
itu semuanya.
Terima kasih
sumber
Sinkronisasi Data Inti dengan Rails adalah presentasi mendetail yang menyertakan kode sampel untuk membuat serial / deserialisasi objek Data Inti Anda ke / dari JSON (lompat ke slide 55 untuk bagian Data Inti). Kode sampelnya mengasumsikan model yang cukup sederhana tanpa hubungan, meskipun menurut saya akan sangat mudah untuk diperluas.
Presentasi juga membahas beberapa detail tentang menjaga model Data Inti Anda tetap sinkron dengan aplikasi web berbasis REST, dengan petunjuk ke beberapa pustaka yang berguna, termasuk ObjectiveResource dan ASIHTTPRequest . Tidak yakin apakah itu yang Anda coba lakukan, tetapi itu layak untuk dilihat bahkan untuk kode Data Inti.
sumber
Jika Anda memiliki
NSDate
di objek yang dikelola, seperti yang disebutkan di atas di salah satu komentar, Anda akan mengalami masalah membuat serial objek yang berisiNSDate
. Perbaikan sederhana adalah menambahkanJSONDataRepresentation
metode untukNSDate
menggunakan kategori objektif-c.Tambahkan dua file ini ke proyek Anda:
NSdate.h:
NSDate.m:
sumber
Ada lib yang melakukan sinkronisasi JSON untuk Anda: https://github.com/sixdegrees/lidenbrock
sumber
Saya menemukan posting ini yang bekerja dengan sangat baik.
http://touchalicious.com/blog/2009/10/25/turn-core-data-models-into-json.html
Karena ini rekursif, hubungan banyak ke banyak akan terus berputar melalui dirinya sendiri. Untuk menghindari hal ini, saya menambahkan kunci "isExportable" ke kamus info pengguna dari hubungan dalam model Data Inti saya. Anda kemudian dapat memeriksa kunci ini dan memilih untuk tidak mengulang hubungan tanpanya.
sumber
Hanya berpikir saya akan memposting pembaruan cepat untuk pertanyaan ini. Saya mengikuti Jawaban oleh Marcus dan Brandon dan menghasilkan ini untuk mengekspor JSON (masih menggunakan TouchJSON):
Saya tidak bisa mendapatkan impor berfungsi, mungkin itu ada hubungannya dengan fakta bahwa saya menggunakan Magical Record Saya tidak yakin, jadi saya hanya mengulang melalui aliran JSON yang masuk dan membuat objek secara manual ...
sumber
Marcus S. Zarra telah menginspirasi saya untuk membawa ide rekursif ke versi yang berfungsi. Dalam versi ini Anda tidak perlu mengatur kunci di CoreData dan Anda dapat memotong dan menempelkannya di proyek Anda :-)
Kuncinya di sini adalah meneruskan entitas induk sebagai argumen ke rekursi, sehingga kita dapat memutuskan hubungan mana yang harus kita isi dengan data. Jadi keduanya berfungsi:
dataStructureFromManagedObject
danmanagedObjectFromStructure
dapat menyandikan dan mendekode objek entitas apa pun dari CoreData ke dalam kamus dan kembali menjadi objek.sumber