मेरे पास एक Student इकाई है जिसमें dateOfBirth विशेषता है।

मैं सभी छात्रों को Student एंटिटी से उनकी जन्मतिथि के आरोही क्रम में लाना चाहता हूं लेकिन महीने के घटते क्रम के अनुसार समूहीकृत करना चाहता हूं।

उदाहरण के लिए: एक ही महीने से संबंधित छात्रों को आरोही क्रम में एक साथ समूहीकृत किया जाता है लेकिन सभी समूह अवरोही क्रम में होते हैं।

धारा 1: दिसंबर 2019
-- छात्र १: जन्म तिथि - १ दिसंबर २०१९
-- छात्र २: जन्म तिथि - २ दिसंबर २०१९
-- छात्र ३: जन्म तिथि - ३ दिसंबर २०१९
धारा 2: नवंबर 2019
-- छात्र १: जन्म तिथि - १ नवंबर २०१९
-- छात्र २: जन्म तिथि - २ नवंबर २०१९
-- छात्र ३: जन्म तिथि - ३ नवंबर २०१९
धारा 3: अक्टूबर 2019
-- छात्र १: जन्म तिथि - १ अक्टूबर २०१९
-- छात्र २: जन्म तिथि - २ अक्टूबर २०१९
-- छात्र ३: जन्म तिथि - ३ अक्टूबर २०१९

क्या इस प्रश्न का समर्थन करने के लिए NSFetchRequest लिखना संभव है? मुझे NSFetchResultsController का उपयोग UITableView को पॉप्युलेट करने के लिए करना है, लेकिन मैं एक लाने का अनुरोध लिखने में असमर्थ हूं।

छात्रों को उनके dateOfBirth द्वारा समूहित करने के लिए मेरे पास एक अतिरिक्त विशेषता है जो yearMonthString dateFormat yyyyMM के साथ है। मैं छात्रों के समूह के लिए yearMonthString विशेषता का उपयोग कर रहा हूं।

let studentFetchRequest: NSFetchRequest<Student> = Student.fetchRequest()
studentFetchRequest.predicate = NSPredicate(format: "%K != nil AND %K != nil", #keyPath(Student.dateOfBirth), #keyPath(Student.yearMonthString))

let dateSortDescriptor = NSSortDescriptor(key: #keyPath(Student.dateOfBirth), ascending: false)
studentFetchRequest.sortDescriptors = [dateSortDescriptor]

let frc = NSFetchedResultsController<Student>(fetchRequest: studentFetchRequest,
                                              managedObjectContext: managedContext,
                                              sectionNameKeyPath: #keyPath(Student.yearMonthString),
                                              cacheName: nil)

यदि मैं dateSortDescriptor को आरोही के रूप में देता हूं तो सभी खंड भी आरोही हो जाते हैं और यदि मैं dateSortDescriptor को अवरोही के रूप में देता हूं तो अनुभाग के भीतर के छात्र अवरोही हो जाते हैं।

इस लाने के अनुरोध को लिखने का सही तरीका क्या है? क्या अनुभागों के लिए अलग-अलग प्रकार का डिस्क्रिप्टर देना संभव है?

1
FE_Tech 25 पद 2019, 16:56

1 उत्तर

सबसे बढ़िया उत्तर

दो प्रकार के डिस्क्रिप्टर का उपयोग करें, एक वर्ष/माह (अवरोही) के आधार पर छाँटने के लिए, फिर दूसरा जन्म तिथि (आरोही) के आधार पर छाँटने के लिए:

let groupSortDescriptor = NSSortDescriptor(key: #keyPath(Student.yearMonthString), ascending: false)
let dateSortDescriptor = NSSortDescriptor(key: #keyPath(Student.dateOfBirth), ascending: true)
studentFetchRequest.sortDescriptors = [groupSortDescriptor, dateSortDescriptor]
1
pbasdf 25 पद 2019, 16:48