2010-12-12 11 views
5

dışında Şerit. Yani örneğin "Beatles", iTunes/iPod'un yaptığı gibi "Beatles" olarak sıralanır. Açıkçası cleanName olarak uygulamayı çökertirNSSortDescriptor ben CoreData saklanan sanatçıların bir grup var ve adı görmezden gelerek önek "" sıralamak istiyorum "" öneki

NSSortDescriptor *sortByName = [[NSSortDescriptor alloc] initWithKey:@"cleanName" ascending:YES]; 

değil SQLEntity bir özelliktir:

onunla sıralamak için kullanılabilecek şekilde

Yani benim Sanatçı modeline özel bir cleanName özellik ekleyerek çalıştı
...keypath cleanName not found in entity <NSSQLEntity Artist id=1> 

Ben deposunda cleanName kurtarabilecek biliyorum, ama sadece bana yanlış geliyor. Adın "öneki" sırasının kaldırılması için yeni bir özellik mi? Gerçekten mi?

Bunun yerine, ben özel bir compareObject ile NSSortDescriptor sınıflara çalıştı: toObject: Uygulama: Ben yeni bir sanatçı eklediğinizde bu işleri

- (NSComparisonResult)compareObject:(Artist*)artist1 toObject:(Artist*)artist2 { 

NSString *cleanString1 = [artist1.name stringByReplacingOccurrencesOfString:@"the " withString:@"" options:NSCaseInsensitiveSearch range:NSMakeRange(0, [artist1.name length])]; 
NSString *cleanString2 = [artist2.name stringByReplacingOccurrencesOfString:@"the " withString:@"" options:NSCaseInsensitiveSearch range:NSMakeRange(0, [artist2.name length])]; 

return [artist1.cleanName compare:artist2.cleanName options:NSCaseInsensitiveSearch]; 
} 

, benim mağaza "Beatles" derler. Sanatçı "Beatles" olarak sıralanır ve "B" bölümümün içinde görüntülenir. Ama en kısa sürede bunu app çıkın ve yeniden başlatın olarak, aşağıdaki hatayı alıyorum ve tableview sadece boş kalır: Eğer ben giriş ettiğimi görebileceğiniz gibi

sectionIndex A for Apparat 
sectionIndex B for Bonobo 
sectionIndex M for Misteur Valaire 
sectionIndex M for Moderat 
sectionIndex P for Paul Kalkbrenner 
sectionIndex R for Röyksopp 
sectionIndex B for The Beatles 
NSFetchedResultsController ERROR: The fetched object at index 6 has an out of order section name 'R. Objects must be sorted by section name' 

, bölüm başlıkları Beatles (gayet 'bölüm başlığı, olması gerektiği gibi B'dir. Fakat sıralama, "Bonobo" dan önce doğru olması gerektiğinden, sıralama bozulur.

Bunu düzeltmek için nasıl biliyor musunuz?

+0

nasıl * * cleanName uyguladınız? Varlık için geçici bir mülk gibi görünecek. – Huperniketes

+0

Ben geçici özellikler NSFetchedResultsControllers sıralama için kullanılamaz eminim. İyi Mastering Çekirdek Veri – samvermette

cevap

3

Birkaç kişi ile sohbet ettikten sonra, veritabanına "cleanName" kaydetmenin en iyi yol olduğunu ve "normalleştirmenin abartılı" olduğunu görüyoruz.

+1

Apple da onun WWDC 2010 Oturum 118 bu çözümü önerir. Teşekkür ederim. –

+0

bilmek: – samvermette

İlgili konular