我几乎完全完成了应用程序的本地化以支持多种语言,但我遇到了无法解决的排序问题。
我有这个实体:
import Foundation
import CoreData
extension Lift {
@NSManaged var liftName: String
@NSManaged var uuid: String
@NSManaged var custom: Bool
@NSManaged var liftEvent: NSSet?
}
我有一个获取请求,我在几个地方使用它来获取所有 Lift 对象:
func fetchSelectableLifts() -> NSFetchedResultsController<NSFetchRequestResult> {
var fetchedResultsController = NSFetchedResultsController<NSFetchRequestResult>()
let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "Lift")
fetchRequest.sortDescriptors = [NSSortDescriptor(key: "custom", ascending: true), NSSortDescriptor(key: "liftName", ascending: true)]
fetchedResultsController = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext: context, sectionNameKeyPath: #keyPath(Lift.custom), cacheName: nil)
try! fetchedResultsController.performFetch()
return fetchedResultsController
}
问题是我需要按它们的本地化对它们进行排序
liftName
但我只存储英文名称。对我来说,在核心数据中存储多种语言的名称是不切实际的。
创建
NSFetchRequest<NSFetchRequestResult>
时必须指定排序描述符,并且由于名称以英文存储,因此只能按英文名称排序。结果是这样的:
获取后是否可以对
NSFetchRequest<NSFetchRequestResult>
进行排序?
是的,只需将变量添加到
extension Lift
@objc
var liftNameLocalized: String {
NSLocalizedString(self.liftName ?? “”, comment:"")
}
obj
包装器使其可用作 CoreData 的变量。您可以使用它来获取、排序、谓词等。