如何按本地化值对 NSFetchedResultsController 进行排序?

问题描述 投票:0回答:1

我几乎完全完成了应用程序的本地化以支持多种语言,但我遇到了无法解决的排序问题。

我有这个实体:

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>
进行排序?

swift core-data localization nsfetchedresultscontroller
1个回答
0
投票

是的,只需将变量添加到

extension Lift

@objc
var liftNameLocalized: String {
     NSLocalizedString(self.liftName ?? “”, comment:"")
}

obj
包装器使其可用作 CoreData 的变量。您可以使用它来获取、排序、谓词等。

© www.soinside.com 2019 - 2024. All rights reserved.