6

मैं तिथि से क्रमबद्ध करने का प्रयास कर रहा हूं और फिर समय शुरू कर रहा हूं। प्रारंभ समय मध्यरात्रि से मिनट है। तो यदि प्रारंभ समय < 100 है तो यह ठीक तरह से क्रमबद्ध नहीं होगा।NSSortDescriptor सही ढंग से पूर्णांक को सॉर्ट नहीं कर रहा है

- (NSFetchedResultsController *)fetchedResultsController { 

    if (fetchedResultsController != nil) { 
     return fetchedResultsController; 
    } 

    /* 
    Set up the fetched results controller. 
    */ 
    // Create the fetch request for the entity. 
    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; 
    // Edit the entity name as appropriate. 
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"Appointments" inManagedObjectContext:[[DataManager sharedInstance] managedObjectContext]]; 
    [fetchRequest setEntity:entity]; 
    [fetchRequest setIncludesPendingChanges:YES]; 

    // Set the batch size to a suitable number. 
    //[fetchRequest setFetchBatchSize:20]; 

    // Sort using the date/then time property. 
    NSSortDescriptor *sortDescriptorDate = [[NSSortDescriptor alloc] initWithKey:@"date" ascending:YES]; 
    NSSortDescriptor *sortDescriptorTime = [[NSSortDescriptor alloc] initWithKey:@"start_time" ascending:YES]; 
    NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptorDate, sortDescriptorTime, nil]; 


    [fetchRequest setSortDescriptors:sortDescriptors]; 

    // Use the sectionIdentifier property to group into sections. 
    NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:[[DataManager sharedInstance] managedObjectContext] sectionNameKeyPath:@"date" cacheName:@"List"]; 
    aFetchedResultsController.delegate = self; 
    self.fetchedResultsController = aFetchedResultsController; 
    NSLog(@"FetchedController: %@", fetchedResultsController); 
    return fetchedResultsController; 
} 

मैं इस तरह के पूर्णांक को सही ढंग से कैसे बना सकता हूं?

+0

मैं आशा करता हूं कि आपका स्टार्ट_टाइम (आपके कोर डेटा ऑब्जेक्ट मॉडल में) एक NSNumber ऑब्जेक्ट है और स्ट्रिंग नहीं है। –

उत्तर

27

तो start_time एक स्ट्रिंग तो यह वर्णानुक्रम में क्रमित किया जाएगा जिसका अर्थ b से पहले जो भी मतलब है कि 112 से पहले यह है कि aa है।

अधिक मानव अनुकूल तरीके से क्रमबद्ध करने के लिए NSString का localizedStandardCompare: चयनकर्ता के रूप में उपयोग करें।

[NSSortDescriptor sortDescriptorWithKey:@"start_time" ascending:YES selector:@selector(localizedStandardCompare:)] 
+0

वह था! धन्यवाद। मेरे पास यह एक कोर के रूप में मेरे मूल डेटा में है क्योंकि यह एपीआई से स्ट्रिंग के रूप में आता है और संख्या नहीं। – Bot

+2

यह कमाल है। ठीक वही जो मेरे द्वारा खोजा जा रहा था। मुझे समस्या थी कि मेरे स्ट्रिंग कॉलम को इस तरह हल किया गया था 1,10,11,2,3,4 ... समाधान के ऊपर हल किया गया। – shaikh

+0

NSSortDescriptor * descriptor = [NSSortDescriptor sortDescriptorWithKey: @ "dateTimeInSec" आरोही: हाँ चयनकर्ता: @ चयनकर्ता (स्थानीयकृत मानक कॉम्पैयर :)]; मेरा ऐप दुर्घटनाग्रस्त क्या start_time एक प्रकार एनएसएसटींग विशेषता या NSNumber है? त्रुटि थी - [__ एनएससीएफ नम्बर लोकलाइज्ड मानक कॉम्पैयर:]: उपयोगकर्ता पहचान (शून्य) के साथ 0x16dc40c0 उदाहरण के लिए भेजा गया अपरिचित चयनकर्ता – coolcool1994

संबंधित मुद्दे