2012-01-11 24 views
5

मैं इसआदेश उपशीर्षक

[userLocation distanceFromLocation: annotationLocation]/1000; 

की तरह 2 अंक की दूरी हो रही है और bellow screenshot http://i41.tinypic.com/ruxv74.png

सवाल यह है कि छवि की तरह एक tableview का उपशीर्षक को यह निर्धारित करके tableview सेल , क्या मैं इस तालिका को दूरी (उपशीर्षक) द्वारा ऑर्डर कर सकता हूं?

धन्यवाद!

और बुरे अंग्रेज़ी = के लिए खेद एक्स

+0

डगलस, आपने किस समाधान का उपयोग किया? क्या आप कोरडाटा का उपयोग कर रहे हैं? – marciokoko

+0

फेरोस्टर समाधान मेरे लिए काम करता है। मैं .plist फ़ाइल का उपयोग कर रहा हूँ। उपयोगकर्ता स्थान और एनोटेशनस्थान सीएलएलोकेशन दोनों हैं। तो मैंने -initWithLatitude का उपयोग किया: रेखांश: और -डिस्टेंस फ्रॉमोकेशन: दूरी प्राप्त करने और इसे एनएसएआरएआरई पर सॉर्ट करने के लिए। –

+0

शायद चैट करना सबसे अच्छा होगा लेकिन मेरे पास लेट और लम्बे समय के स्थानों की सरणी है। मैं उपयोगकर्ता स्थान से दूरी को प्रत्येक स्थान पर गणना करता हूं। तो मेरे पास सभी डेटा है, तो मैं नई सरणी में क्या डालूं? यहां: http: //stackoverflow.com/questions/14845434/how-do-i-sort-table-cells-from-core-data – marciokoko

उत्तर

6

आप अपने UITableView की कोशिकाओं किसी भी तरह से करना चाहते हैं आदेश कर सकते हैं, लेकिन आप उन्हें दिखा जब आप तालिका के डेटा स्रोत बनाने से पहले यह करना है। यदि आप NSFetchResultsController का उपयोग करते हैं, तो आप दूरी को डिस्क्रिप्टर के रूप में दूरी डाल सकते हैं। और यदि आप एक साधारण एनएस (उत्परिवर्ती) ऐरे का उपयोग कर रहे हैं, तो इसे तालिका के स्रोत बनाने से पहले इसे सॉर्ट करें।

जैसा क्रिस ने कहा, आप इसे

NSSortDescriptor *titleSorter= [[NSSortDescriptor alloc] initWithKey:@"annotationLocation" ascending:YES]; 

साथ अगर यह तुम क्या प्रयोग कर रहे हैं, तो एक NSArray है कर सकते हैं:

[arrayOfObjects sortUsingDescriptors:[NSArray arrayWithObject:titleSorter]; 

और अगर यह एक NSFetchResultsController है:

NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:titleSorter, nil]; 
[fetchRequest setSortDescriptors:sortDescriptors]; 
+0

बिल्कुल सही! यह मेरे लिए बहुत अच्छा काम है। धन्यवाद सबको =] –

+0

लेकिन एनोटेशन स्थान डेटाबेस में नहीं है। मेरे पास लेट और लम्बा है। – marciokoko

0

इन दूरीों के साथ एक सरणी बनाएं, इसे ऑर्डर करें कि आप कैसे चाहते हैं और

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
static NSString *cellIdentifier = @"cellIdentifier"; 
    UITableViewCell *_cell = [self.tableView dequeueReusableCellWithIdentifier:cellIdentifier]; 
    if (_cell == nil) { 
     _cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:cellIdentifier] autorelease]; 
    } 
    _cell.textLabel.text = @"Transcripts"; 
    _cell.detailTextLabel.text = [yourArray objectAtIndex:indexPath.row]; 
    return _cell; 
} 

अच्छी तरह से, ऐसा कुछ चाल करना चाहिए।

आशा है कि यह मदद करता है

+0

मेरे सीडी डेटाबेस में केवल अक्षांश और देशांतर है।वर्तमान में स्थानों को तिथि के अनुसार क्रमबद्ध किया गया है: ' [अनुरोध सेटसोर्टडिस्क्रिप्टर्स: [एनएसएआरएआरए सरणीविथऑब्जेक्ट: [एनएसएसआरटीस्क्रिप्टर सॉर्ट डिस्क्रिप्टर विथकी: @" तिथि "आरोही: हाँ]]]; self.dates = [self.managedObjectContext executeFetchRequest: अनुरोध त्रुटि: और त्रुटि]; ' – marciokoko

1

एक NSSortDescriptor बनाएं अपनी पंक्तियों को सॉर्ट करने के लिए:

NSSortDescriptor *titleSorter= [[NSSortDescriptor alloc] initWithKey:@"annotationLocation" ascending:YES]; 
[arrayOfObjects sortUsingDescriptors:[NSArray arrayWithObject:titleSorter]; 
0

मान लिया जाये कि आप कुछ कुछ वस्तुओं एक समन्वय और एक सरणी के स्थानों के लिए में वस्तुओं डाल पकड़े है, तो आप एक तुलनित्र का उपयोग कर सकते ऐसा करके ब्लॉक:

locations = [locations sortedArrayUsingComparator: ^(id a, id b) { 

    CLLocationDistance dist_a= [[a objectsForKey:@"coordinate"] distanceFromLocation: userPosition]; 
    CLLocationDistance dist_b= [[b objectsForKey:@"coordinate"] distanceFromLocation: userPosition]; 
    if (dist_a < dist_b) { 
     return (NSComparisonResult)NSOrderedAscending; 
    } else if (dist_a > dist_b) { 
     return (NSComparisonResult)NSOrderedDescending; 
    } else { 
     return (NSComparisonResult)NSOrderedSame; 
    } 
} 

आप अपडेट किए गए स्थानों हर बार जब आप tableView प्रदर्शित पाने के लिए अपने viewWillAppear: लिए इस कोड को जोड़ने ।

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