如何与NSFetchedResultsController有一个AZ索引
我为我的表视图使用NSFetchedResultsController,我想有一个索引AZ。
问题是,如果我使用实体的属性,我想有部分,它会返回尽可能多的部分,因为这个属性有不同的名称。
所以我想在我的NSManagedObject子类中添加另一个属性。 这个属性将只是另一个的第一个字母。
所以我发现这个话题 ,他们解释如何做到这一点,但:
- 这是一个很老的,所以我想知道现在没有更好的select
- 它在Objective-C中,我必须承认,我并不真正掌握这种语言。
虽然我试图做他们所说的事,但没有奏效。
class Currency: NSManagedObject { @NSManaged var country: String @NSManaged var code: String func firstLetterCodeForSection() -> String { self.willAccessValueForKey("firstLetterCodeForSection") var tempString = self.valueForKey("code")!.uppercaseString tempString.removeRange(Range(start: tempString.startIndex, end:advance(tempString.startIndex, 1))) self.didAccessValueForKey("firstLetterCodeForSection") return tempString } func firstLetterCountryForSection() -> String { self.willAccessValueForKey("firstLetterCountryForSection") var tempString = self.valueForKey("country")!.uppercaseString tempString.removeRange(Range(start: tempString.startIndex, end:advance(tempString.startIndex, 1))) self.didAccessValueForKey("firstLetterCountryForSection") return tempString } }
我在实体中设置firstLetterCountryForSection
和firstLetterCodeForSection
为transient
这里是我的NSFetchedResultsController:
fetchedResultsController = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext: managedContext, sectionNameKeyPath: "firstLetterCountryForSection", cacheName: nil)
这种sorting是基于code
还是country
。
而且它不起作用
我错过了什么或做错了什么?
谢谢你的帮助!
更新:
我发现了这个问题,它来自我在第一个字母串中的行,实际上我保留除了第一个字母以外的所有字母。
我replace了
tempString.removeRange(Range(start: tempString.startIndex, end:advance(tempString.startIndex, 1)))
通过
tempString.removeRange(Range(start: advance(tempString.startIndex, 1), end:tempString.endIndex))
但现在我有另一个问题。 我尝试过:
func firstLetterCountryForSection() -> String { } var firstLetterCountryForSection: String { } dynamic var firstLetterCountryForSection: String? { }
结果是一样的,它的工作(至less看起来像)。 有什么不同? 什么是最好的使用?
再次感谢
您正尝试使用函数来计算应该使用dynamicvariables的部分:
dynamic var section: String? { let characters = Array(code.uppercaseString) return characters[0] }
然后你的fetchedResultsController
应该看起来像这样:
fetchedResultsController = NSFetchedResultsController(fetchRequest: fetchRequest(), managedObjectContext: managedObjectContext!, sectionNameKeyPath: "section", cacheName: "Root")
有关设置瞬态属性的更多信息,请参阅我的答案。