Nilai Unik dari Data Inti

Saya memiliki aplikasi berbasis data inti yang mengelola catatan dealer mobil. Setiap catatan menyimpan alamat dealer, yang dipecah menjadi komponen addressLine1, addressLine2, city, state, dan zip, masing-masing disimpan sebagai string di penyimpanan data.

Saya ingin menyajikan daftar kota dengan dealer kepada pengguna, jadi saya mencoba mencari tahu apakah mungkin untuk mendapatkan daftar setiap nama kota unik yang telah dimasukkan ke dalam toko . Dengan kata lain, apakah mungkin mengeluarkan semacam pertanyaan terhadap semua catatan dealer yang akan mengembalikan daftar nama kota yang berbeda?

Saya ingin tahu cara melakukan ini dengan mudah dengan kueri SQL, tetapi (bagaimana) hal ini dilakukan di Data Inti?

Terima kasih banyak!


person John Stupak    schedule 22.03.2010    source sumber


Jawaban (3)


Data Inti memiliki opsi untuk mendapatkan catatan berbeda. Metode untuk mendapatkan hasil unik menggunakan NSArray dan NSSets tidak disarankan.

[fetchRequest setResultType:NSDictionaryResultType];
NSDictionary *entityProperties = [entity propertiesByName];
[fetchRequest setPropertiesToFetch:[NSArray arrayWithObject:[entityProperties objectForKey:@"<<yourattrib>"]]];
[fetchRequest setReturnsDistinctResults:YES];

Lihat dokumentasi Apple dan periksa jawaban untuk Bagaimana cara mengambil nilai berbeda di Data Inti?

person palaniraja    schedule 17.03.2012

Anda benar, tidak ada cara yang "mudah" untuk melakukan ini dengan Core Data, karena Core Data bukanlah database. Namun, hal itu mungkin saja terjadi. Inilah gambaran umumnya:

  1. Ambil semua objek Dealer Anda melalui NSFetchRequest. Untuk menyederhanakan kueri, Anda dapat mengatur permintaan pengambilan agar hanya mengambil atribut city.
  2. Jalankan NSArray * uniqueCities = [fetchedDealers valueForKeyPath:@"@distinctUnionOfObjects.city"];
person Dave DeLong    schedule 22.03.2010

Cara cepat untuk memastikan serangkaian hal unik adalah dengan menggunakan NSSet. Setelah Anda mendapatkan hasil untuk kueri tentang kota, ambil NSArray Anda dan lakukan

NSSet* uniqueResults = [NSSet setWithArray:resultsArray];

Anda dapat mengubah kumpulan tersebut menjadi kelas koleksi lain jika lebih nyaman atau hanya enumerator objek untuk melakukan sesuatu dengan semuanya. Saya tidak tahu apakah pendekatan ini atau metode valueForKeyPath dari Dave DeLong lebih efisien.

person Adam Eberbach    schedule 22.03.2010