如何与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 } } 

我在实体中设置firstLetterCountryForSectionfirstLetterCodeForSection为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") 

有关设置瞬态属性的更多信息,请参阅我的答案。