2017-10-27 27 views
5

içinde sectionNameKeyPath öğesinden bağımsız olarak sıralama sırasını değiştirin , sectionNameKeyPath'un, kategoriye göre olduğu bölüme göre gruplandırıyorum.NSFetchedResultsController

Kategorilerim: Yetişkin, Çocuk, Vizyon, Hiçbiri. Yetişkin, Çocuk, Yok Vision

Azalan düzen sıralama: Vizyon, Yok, Çocuk, Erişkin

istediğim Yok kategorisi bağımsız olarak her zaman yanlış sıralar en son gelmek sıralama

Artan sırası.

Artan sıralama istenen: Yetişkin, Çocuk, Vizyon, Yok

istenen Azalan sıralama: Görme, Çocuk, Yetişkin, Hiçbiri

şöyle kullanılan Kod geçerli:

let fetchedResultsController = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext: managedOC, sectionNameKeyPath: "category", cacheName: nil) 

cevap

0

O zamandan beri düşünüyorum kategoriyi String olarak kaydediyorsunuz ve String değeri sadece Alfabetik sırayla sıralanıyor. Veritabanında sayısal bir alan oluşturabilir misiniz? Ve Yetişkin = 1, Çocuk = 2, Vizyon = 3, Yok = 4, gibi sayısal değerleri depolayın. Verilerinizi kolayca artan veya azalan düzende düzenleyebilir ve sıralayabilirsiniz. Umarım bu size yardımcı olur.

+0

Ancak azalan sipariş durumunda NONE son öğe olmalıdır. – Soumen

+0

İlk sıralamayı "Yetişkin = 1, Çocuk = 2, Vizyon = 3" sıralama sırasına göre sıralayabilir ve # 1 listesinde saklayabilirsiniz. Ve bir sonraki "No" için sadece öğe getir ve # 2 listesinde sakla, sonunda her iki listeyi birleştir. – Waseem

0

CoreData modelini değiştirmekten memnunsanız, kategorileri temsil edecek yeni bir varlık oluşturabilirsiniz. Category öğesinin üç özelliği olabilir: name (dize), ascOrder (Tamsayı 16) ve descOrder (Tamsayı 16). Sonra aşağıdaki gibi (bir kerelik görev olarak) değerleri ile dört Category nesneleri oluşturmak:

name  ascOrder descOrder 
====  ======== ========= 
Adult  1   3 
Child  2   2 
Vision  3   1 
None  4   4 

Category bir (bire bir) ilişki ile varlığın category niteliğini değiştirin. Ters ilişki çok olmalıdır. Şimdi, öznitelik değerini örneğin "Yetişkin" olarak ayarlamak yerine,nesnesini name "Yetişkin" ile ayarlayın. Daha sonra FRC'nizi nesneleri category.ascOrder veya category.descOrder anahtarıyla sıralamak ve ilgili sectionNameKeyPath belirtin.

Sonuç olarak tablonuz bölümlere ayrılacak ve doğru şekilde sıralanacaktır. Ancak, sectionNameKeyPathascOrder (veya descOrder) olduğundan, name özelliği "Yetişkin", "Çocuk" vb. Yerine 1,2,3 veya 4 olacaktır. Bunu düzeltmek için, tablonuzun titleForHeaderInSection veya viewForHeaderInSection yöntemini kullanarak,

let sectionInfo = self.fetchedResultsController.sections![section] 
let sectionName = sectionInfo.name 

ancak bunun yerine bölümünde ilk öğeden ilişkiyi geçerek adını almak: kullanmayan dizinleri kullanıyorsanız

let sectionInfo = self.fetchedResultsController.sections![section] 
let firstItem = sectionInfo.objects![0] as! YourEntity 
let sectionName = firstItem.name 

, endeks başlıkları ile benzer sorunları olabilir .

Uygulamanız halihazırda yayındaysa, bu yaklaşımın bir dezavantajı verilerinizin geçişini üstlenmeye ihtiyaç duyacaktır. Hafif göçün bir özniteliğin yeni bir varlıkla ilişkisini değiştirip değiştiremeyeceğini hatırlayamıyorum; Araştırmak için sana bırakıyorum.

İlgili konular