2011-08-31 24 views
5

निम्न कोड में:NSFetchedResultsController और sectionNameKeyPath का उपयोग करते समय अनुभाग का नाम कैसे प्राप्त करें संबंध है?

NSFetchedResultsController *frc = 
[[NSFetchedResultsController alloc] 
initWithFetchRequest:fetchRequest 
managedObjectContext:myManagedObjectContext 
sectionNameKeyPath:@"store" 
cacheName:@"SomeCache" 
]; 

sectionNameKeyPath के लिए @ "स्टोर" मूल्य वास्तव में एक स्टोर इकाई है जो एक नाम विशेषता है कि मैं वास्तव में मेरे अनुभाग शीर्ष लेख शीर्षक के रूप में की जरूरत है के लिए एक रिश्ते के लिए अंक। 0x5b504f0 0x5b51190 कौन सा स्टोर वस्तु के रूप में जहाँ तक मैं बता सकता हूँ लाए जाने के लिए किया जा रहा कोड डेटा पते दिए गए हैं:

लेकिन जिस तरह से मेरी कोड सेटअप के रूप में मैं बजाय तरह खंड शीर्षक इसे पूरा नहीं किया जा सकता है।

मैं NSFetchedResultsController का उपयोग कैसे कर सकता हूं ताकि मैं इसे बता सकूं कि मैं इसे सेक्शननाम नाम से प्राप्त होने वाले नाम की विशेषता प्राप्त करना चाहता हूं: @ "store"? या क्या कोई और कामकाज है?

उत्तर

5

sectionNameKeyPath:@"store.name"

+1

धन्यवाद! बस प्रोप देने के लिए, निम्नलिखित ने भी मदद की: http://stackoverflow.com/questions/2353924/core-data-fetched-results-controller-and-custom-section-header – pulkitsinghal

1

मैं जानता हूँ कि यह एक पुरानी धागा है की कोशिश करो, लेकिन मैं स्विफ्ट का उपयोग कर मेरी समाधान जोड़ना चाहते हैं।

मुझे सलाह देनी चाहिए कि यह समाधान NSFetchedResultsController द्वारा दिए गए अनुभाग नाम के प्रारूप पर निर्भर करता है, इसलिए यह आंतरिक कार्यान्वयन पर निर्भर करता है जिसे ऐप्पल द्वारा बदला जा सकता है।

अनुभाग नाम सतत् डेटा में वस्तु आईडी यूआरआई होता है, इसलिए आप पहली बार यूआरआई निकालने और फिर इसी यूआरआई

override func tableView(tableView: UITableView, titleForHeaderInSection section: Int) -> String? { 
    let sectionInfo = fetchedResultsController?.sections![section] 
    let sectionName = sectionInfo?.name 

    //This part depends on the internal implementation of sectionInfo.name 
    let initialRange = sectionName?.rangeOfString("<") 
    let finalRange = sectionName?.rangeOfString(">") 

    let uri = sectionName?.substringWithRange((initialRange?.endIndex)!..<(finalRange?.startIndex)!) 
    let url = NSURL(string: uri!) 

    let store = fetchedResultsController?.managedObjectContext.persistentStoreCoordinator 

    let objectID = store?.managedObjectIDForURIRepresentation(url!) 
    let coreObject = fetchedResultsController?.managedObjectContext.objectWithID(objectID!) 
    //return the correct property from the object as the title 
    let title = ... 
    return title 
} 

के साथ वस्तु के लिए स्टोर पूछकर वस्तु प्राप्त कर सकते हैं खैर, आपको त्रुटियों की जांच करने की आवश्यकता है (मैं उन के सामने guard का उपयोग करता हूं) लेकिन आपको यह विचार मिलता है।