【问题标题】:How can I sort a UITableView using CoreData information如何使用 CoreData 信息对 UITableView 进行排序
【发布时间】:2018-01-30 10:08:08
【问题描述】:

现在我使用这个函数来获取我的UITableView,它工作正常,但我想通过"dataUltimei" 对它进行排序,这是一个日期(例如:07.08.2017)。我不知道为什么,但它没有对表格进行排序。这是我的代码:

func fetch() {

    guard let appDelegate = UIApplication.shared.delegate as? AppDelegate else { return }
    let managedObjectContext = appDelegate.persistentContainer.viewContext
    let sortDescriptor = NSSortDescriptor(key: "dataUltimei", ascending: true)
    let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName:"Contact")
    fetchRequest.sortDescriptors = [sortDescriptor]
    do {
        contacts = try managedObjectContext.fetch(fetchRequest) as! [NSManagedObject]
    } catch let error as NSError {
        print("Could not fetch. \(error)")
    }
}

【问题讨论】:

  • 你在使用 fetchResultViewController 吗?
  • 是的,我正在使用 fetchResultViewController

标签: ios swift uitableview core-data swift3


【解决方案1】:

由于您将日期存储为作为字符串,因此您将无法让 Core Data 将其排序为作为日期。 Core Data 不知道您的字符串是日期,因此它使用字符串规则而不是数字日期比较对其进行排序,这就是您所看到的。

如果您需要按日期排序,您需要有一个日期。将 Core Data 中的日期保存为日期字段并按该值排序。然后使用 DateFormatter 将日期转换为 UI 字符串。

如果您将日期字符串格式化为年-月-日,排序可能会起作用,例如2017-08-22。但是像这样比较字符串会比比较日期慢得多。它可能会给出正确的排序结果,但性能会差很多。

【讨论】:

    【解决方案2】:

    我发现我的 func 对表格进行排序,但不是按照我想要的方式。 “dataUltimei”将日期表示为字符串(2017 年 6 月 12 日),并按字母顺序对其进行排序。现在我正在尝试将我的日期类型(2017 年 6 月 12 日)转换成这样的类型(06.12.2017),也许它会起作用

    【讨论】:

    • 我建议将日期存储为日期,而不是字符串。当您需要显示它时,请使用 NSDateFormatter
    • 或者更确切地说是它的原生 Swift 对应物,DateFormatter
    猜你喜欢
    • 1970-01-01
    • 2012-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多