Berbagai Konteks untuk Penerapan Kakao Berbasis Dokumen?

Jadi saya sedang membangun aplikasi berbasis dokumen di Kakao dan mencoba memahami NSManagedObjectContext. Saya telah membaca "Dasar-Dasar Data Inti" Apple tetapi tidak dapat memahaminya. Dalam aplikasi saya, saya membuat kelas CoreDataUtility khusus sehingga semua kelas saya bisa mendapatkan konteksnya melalui baris kode berikut:

MyCoreDataUtility *coreData = [MyCoreDataUtility sharedCoreDataUtility];
NSManagedObjectContext *context = [coreData context];

Saya mendapat ide ini dari situs "Kakao adalah pacarku". Yang membuat saya bingung adalah ketika saya menjalankan aplikasi saya dan membuat jendela baru (kelas pemilik file saya adalah subkelas NSPersistentDocument) jika saya membuat perubahan konteks di jendela baru, tampilannya mencerminkan perubahan di jendela lama dan sebagai serta yang baru. Berdasarkan ini saya berasumsi bahwa kedua jendela merujuk pada konteks yang sama atau setidaknya data yang sama dalam beberapa cara.

Jadi pertanyaan saya adalah:

  1. Saya berasumsi bahwa setiap kali saya membuat jendela baru, konteks baru akan dibuat, apakah ini benar?
  2. Jika konteks baru dibuat dan keduanya berbeda (saya sebenarnya mencetak alamat memori dari kedua konteks dan alamatnya berbeda) apakah ini ada hubungannya dengan koordinator penyimpanan persisten atau penyimpanan objek persisten (kedua konsep ini juga samar-samar dalam pikiranku)?
  3. Jika semua dokumen mengacu pada konteks yang sama, apakah saya bertanggung jawab untuk membuat konteks baru setiap kali dokumen dibuat?

Terima kasih semuanya!


person schmudu    schedule 08.08.2012    source sumber


Jawaban (1)


Saya berasumsi bahwa setiap kali saya membuat jendela baru, konteks baru akan dibuat, apakah ini benar?

Tidak dan ya. Membuat jendela baru tidak menciptakan konteks baru, tapi saya kira apa yang Anda lihat sebagai "jendela baru" sebenarnya adalah tindakan Anda "membuat dokumen baru". Dalam aplikasi berbasis dokumen dengan CoreDate Anda mungkin memiliki penyimpanan persisten yang menciptakan konteks baru untuk setiap dokumen dengan sendirinya.

Itu juga jawaban untuk pertanyaan kedua Anda. Koordinator toko hanyalah titik pusat yang mengelola semua dokumen aplikasi Anda. Ini menangani beberapa tindakan terkait menu, seperti membuka, menyimpan, dan semua efek samping.

Jika semua dokumen mengacu pada konteks yang sama, apakah saya bertanggung jawab untuk membuat konteks baru setiap kali dokumen dibuat?

Itu tidak mungkin. Satu konteks hanya dapat dikaitkan dengan satu file (atau "penyimpanan"), sehingga setiap dokumen harus memiliki "minimal" satu konteks. Jika Anda menggunakan templat untuk aplikasi berbasis CoreData dan Multi-dokumen, Anda tidak perlu khawatir tentang membuat konteks baru. Seperti yang saya katakan sebelumnya, koordinator toko akan mengurusnya. Namun saat Anda mempelajari lebih lanjut tentang CoreData, dan khususnya jika Anda melakukan multithreading, Anda harus membuat lebih dari satu konteks karena suatu konteks tidak dapat melintasi thread.

Bisakah Anda memberikan tautan dari Kakao adalah pacar saya tempat Anda mengambil kode itu? Tampaknya Anda ingin seorang lajang menyimpan konteks Anda dan biasanya itu adalah ide yang buruk dalam aplikasi berbasis dokumen karena sangat mudah untuk mengacaukan hal-hal yang memberikan satu fungsi konteks dokumen yang berbeda. Aplikasi Anda harus memiliki alur yang baik ketika konteksnya diteruskan. Namun saya selalu menggunakan singleton jika aplikasi saya tidak berbasis dokumen.

person SystematicFrank    schedule 09.08.2012
comment
Terima kasih Francisco...maaf karena gagal membalas thread ini. - person schmudu; 03.10.2012