मेरे पास एक ऐप है जो एक अनुभाग शीर्षक प्रदर्शित करता है जिसके बाद विवरण आइटम अगले अनुभाग और उसके विवरण के बाद प्रदर्शित होते हैं। सब कुछ ठीक काम करता है, लेकिन मैं उस क्रम को पुनर्व्यवस्थित करना चाहता हूं जिसमें अनुभाग दिखाए जाते हैं। समस्या यह है कि मुझे रिपोर्ट-आईडी द्वारा मूल डेटा ऑर्डर करने की आवश्यकता है, फिर स्थिति, फिर सही विवरण आइटम प्राप्त करने की तारीख उचित अनुभाग के तहत दिखाने के लिए।

let sortDescriptor1 = NSSortDescriptor(key: #keyPath(Item.report.id), ascending:true)
let sortDescriptor2 = NSSortDescriptor(key: #keyPath(Item.report.status), ascending:true)
let sortDescriptor3 = NSSortDescriptor(key: #keyPath(Item.report.dateStarted), ascending:false)
let sortDescriptor4 = NSSortDescriptor(key: #keyPath(Item.date), ascending:true)

अनुभाग (रिपोर्ट) और इससे जुड़े विवरण आइटम के बीच उचित संबंध बनाए रखते हुए मैं सॉर्ट/डिस्प्ले ऑर्डर कैसे बदल सकता हूं? रिपोर्ट.आईडी एक यूयूआईडी है इसलिए वर्तमान में रिपोर्ट यादृच्छिक क्रम में समाप्त होती है।

0
RTB 19 अगस्त 2017, 23:34
आप किस क्रम में अनुभागों को प्रदर्शित करना चाहते हैं? क्या आप NSFetchedResultsController का उपयोग कर रहे हैं?
 – 
pbasdf
20 अगस्त 2017, 09:39

1 उत्तर

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

एक fetchedResultsController की एक संपत्ति sectionNameKeyPath होती है जिसका उपयोग आइटम को एक साथ समूहित करने के लिए किया जा सकता है। यह केवल तभी काम करता है जब sectionNameKeyPath वस्तुओं को उसी क्रम में समूहित करता है जिस क्रम में उन्हें क्रमबद्ध किया जाता है। उदाहरण के लिए: आप दिनांक के अनुसार क्रमित कर सकते हैं और फिर hour या week या किसी अन्य समय आधारित समूह द्वारा समूहित कर सकते हैं, लेकिन name द्वारा नहीं। आपके मामले में आप चाहते हैं कि अनुभागों को इस तरह से क्रमबद्ध किया जाए जो मेल नहीं खाता है कि आइटम कैसे समूहित होते हैं। आपकी विशेष स्थिति के लिए कुछ चतुर समाधान हो सकता है, लेकिन चूंकि आपने कोई विवरण नहीं दिया है, इसलिए मैं केवल एक सामान्य समाधान दे सकता हूं।

indexPath जो एक fetchedResultsController से लौटाया जाता है, वास्तव में तालिका दृश्य या संग्रह दृश्य के साथ अंतःक्रियाशीलता के लिए उपयोगी है। लेकिन यह एक-से-एक संबंध होना जरूरी नहीं है। उदाहरण के लिए आपके पास एक सेटअप हो सकता है जहां एक अनुभाग एक प्राप्त किए गए परिणाम नियंत्रक को इंगित करता है और दूसरा अनुभाग एक अलग को इंगित करता है। इस सेटअप को करने की कुंजी यह सुनिश्चित करना है कि आपके संग्रह व्यू इंडेक्सपाथ के साथ प्राप्त किए गए रिसेट्स कंट्रोलर इंडेक्सपाथ को भ्रमित न करें। आम तौर पर मुझे इंडेक्सपाथ को सीधे रखने के लिए आसानी से परिवर्तित करने का प्रबंधन करने के लिए एक अलग वस्तु मिलती है।

एक अलग ऑब्जेक्ट बनाएं जो प्राप्त किए गए परिणाम नियंत्रक के बाद अनुभागों को सॉर्ट करता है (और एक अनुभाग डालने या हटाए जाने के बाद)। indexPathsManager के अंदर "स्थानीय" indexPath और fetchedResultsController indexPath के बीच मानचित्रों का एक शब्दकोश है। सुनिश्चित करें कि इस ऑब्जेक्ट का उपयोग हर बार जब आप viewController में indexPaths का उपयोग करते हैं। यह भी सुनिश्चित करें कि जब आप दृश्य को अपडेट करते हैं तो इंडेक्सपाथ को कनवर्ट करना सुनिश्चित करें, जब फ़ेच किए गए रिसेट्स कंट्रोलर के प्रतिनिधियों ने कहा कि कोई बदलाव है। और किसी भी अनुभाग को सम्मिलित या हटाए जाने पर indexPathsManager को अपडेट करना।

TL;DR लाने के बाद fetchedResultsController के अनुभागों को क्रमित करें और अपने तालिका दृश्य के indexPath को fetchedResultsController indexPaths में कनवर्ट करें।

1
Jon Rose 20 अगस्त 2017, 16:20