gpt4 book ai didi

iphone - NSSortDescriptor 去除 "the"前缀

转载 作者:行者123 更新时间:2023-12-03 18:59:46 28 4
gpt4 key购买 nike

我在 CoreData 中存储了一堆艺术家,并希望按名称对它们进行排序,但忽略前缀“the”。例如,“The Beatles”将被排序为“Beatles”,有点像 iTunes/iPod 的做法。

因此,我尝试向我的 Artist 模型添加自定义 cleanName 属性,以便将其用于排序:

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

这显然会导致应用程序崩溃,因为 cleanName 不是 SQLEntity 的属性:

...keypath cleanName not found in entity <NSSQLEntity Artist id=1>

我知道我可以将 cleanName 保存在商店中,但对我来说这似乎是错误的。一个新属性只是为了去掉名称中的“the”前缀?真的吗?

因此,我尝试使用自定义的compareObject:toObject:实现对NSSortDescriptor进行子类化:

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

当我向我的商店添加一位新艺术家(例如“The Beatles”)时,此功能有效。该艺术家被分类为“Beatles”并显示在我的“B”部分中。但是,一旦我退出应用程序并重新启动它,我就会收到以下错误,并且表格 View 保持为空:

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,因为它应该是)。但排序被破坏了,因为该记录应该位于“Bonobo”之前。

知道如何解决这个问题吗?

最佳答案

与几个人聊天后,似乎将“cleanName”保存到数据库是最好的方法,并且“规范化被高估了”。

关于iphone - NSSortDescriptor 去除 "the"前缀,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4420069/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com