2012-01-11 36 views
5

ben buSipariş altyazı

[userLocation distanceFromLocation: annotationLocation]/1000; 

gibi 2 puan mesafe alma ve soru screenshot http://i41.tinypic.com/ruxv74.png

feryat görüntü gibi bir tableview altyazı bu ayarlıyorum tarafından tableview hücresi Bu tabloyu mesafeler (alt yazı) ile sipariş edebilir miyim?

Teşekkürler! = Kötü İngiliz

ve üzgün x

+0

Douglas, hangi çözümü kullandınız? CoreData kullanıyor musunuz? – marciokoko

+0

ferostar çözümü benim için çalışıyor. .Plist dosyasını kullanıyorum. kullanıcı konumu ve ek açıklamaların her ikisi de CLLocation'dır. Bu yüzden -initWithLatitude: longitude: ve -distanceFromLocation: mesafeleri almak ve bir NSArray üzerinde sıralamak için kullandım. –

+0

Belki de sohbet etmek en iyisi olurdu ama lat ve long ile konumlar dizisi var. Kullanıcı Konumunun her bir konuma olan mesafesini hesaplıyorum. Yani tüm verilere sahibim, bu yüzden yeni diziye ne koyabilirim? Burada: http: //stackoverflow.com/questions/14845434/how-do-i-sort-table-cells-from-core-data – marciokoko

cevap

6

Sen UITableView en hücreler istediğiniz herhangi bir şekilde sipariş edebilirsiniz, ama sen tablonun veri kaynağı oluşturduğunuzda, bunları göstermeden önce bunu yapmak zorunda. Bir NSFetchResultsController kullanırsanız, uzaklığı sıralama tanıtıcısı olarak ekleyebilirsiniz. Basit bir NS (Değişken) Dizisi kullanıyorsanız, bunu tabloyu yapmadan önce sıralayın. Chris dediği gibi o, sonra kullandığınız hangi bir NSArray ise

, sen

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

ile yapabilirsiniz:

[arrayOfObjects sortUsingDescriptors:[NSArray arrayWithObject:titleSorter]; 

ve bir NSFetchResultsController ise:

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

Mükemmel! benim için çok iyi çalışıyor. Herkese teşekkürler =] –

+0

fakat ek açıklama Veritabanı veritabanında yok. Lat ve uzun boylu var. – marciokoko

0

Bu mesafelerle bir dizi yapın, istediğiniz gibi sipariş verin ve

kuyu gibi, böyle bir şey yapmalısınız.

sizin satırları sıralamak için bir NSSortDescriptor oluşturma

+0

CD veritabanımda yalnızca enlem ve boylam var.Şu anda konumlar şu şekilde sıralanır: [request setSortDescriptors: [NSArray dizisiWithObject: [NSSortDescriptor sortDescriptorWithKey: @ "date" artan: YES]]]; self.dates = [self.managedObjectContext executeFetchRequest: istek hatası: & error]; ' – marciokoko

1

yardımcı Umut: Eğer belli nesneler bir koordinat ve bir dizi yerlere nesneleri koymak tutan var varsayarsak

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

, bir karşılaştırıcı kullanabilirsiniz yaparak bloğu:

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; 
    } 
} 

güncellenmiş Konumları her zaman size tableView gösterilecek almak için viewWillAppear: bu kodu eklemek .