【问题标题】:sectionNameKeyPath NSFetchedResultsController gets ignored - SwiftsectionNameKeyPath NSFetchedResultsController 被忽略 - Swift
【发布时间】:2017-06-12 21:48:46
【问题描述】:

我遵循了这个建议: Format sectionNameKeyPath NSFetchedResultsController - Swift

我对这个实现有点问题。 使用 Xcode 8 和 iOS 10。

我将 Codegen 设置为 Manual/None 并添加了我的 NSManagedObject 子类。

然后我按照你的建议添加了:

var sectionIdentifier: String
{
    get
    {
        let dateFormatter = DateFormatter()
        // dateFormatter.dateStyle = .short
        // dateFormatter.timeStyle = .none
        // ..or to stick to your original question:
        dateFormatter.dateFormat = "yyyy-MMM-dd"
        return dateFormatter.string(from: date! as Date)
    }
}

但无论出于何种原因,它都会被 sectionNameKeyPath 忽略。当我在 sectionNameKeyPath 中输入“日期”时,我得到与上面提到的 AllReadyHome 相同的结果。

我什至尝试过:

return (date?.description)!

它没有产生任何结果。

也许有人可以指出我正确的方向......

更新 1: 这就是我的 fetchedResultsController 的样子:

let fetchRequest: NSFetchRequest<Time> = Time.fetchRequest()
    fetchRequest.fetchBatchSize = 20
    let sortDescriptor = NSSortDescriptor(key: "date", ascending: false)
    fetchRequest.sortDescriptors = [sortDescriptor]
let aFetchedResultsController = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext: self.managedObjectContext!, sectionNameKeyPath: "sectionIdentifier", cacheName: "Time")

结果:没有部分

使用日期时,这是我实体的一个属性:

let aFetchedResultsController = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext: self.managedObjectContext!, sectionNameKeyPath: "date", cacheName: "Time")

看起来像这样:

更新 2: 按照建议使用 sortDescriptor 时,我遇到了崩溃(“sectionIdentifier not in entity):

let fetchRequest: NSFetchRequest<Time> = Time.fetchRequest()
    fetchRequest.fetchBatchSize = 20
    let sortDescriptor1 = NSSortDescriptor(key: "sectionIdentifier", ascending: false)
    let sortDescriptor2 = NSSortDescriptor(key: "date", ascending: false)
    fetchRequest.sortDescriptors = [sortDescriptor1, sortDescriptor2]
let aFetchedResultsController = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext: self.managedObjectContext!, sectionNameKeyPath: "sectionIdentifier", cacheName: "Time")

更新 3: 进入屏幕时,我收到以下警告:

A section returned nil value for section name key path 'sectionIdentifier'. Objects will be placed in unnamed section
 CoreData: error: (NSFetchedResultsController). A section returned nil value for section name key path 'sectionIdentifier'. Objects will be placed in unnamed section

【问题讨论】:

  • sectionNameKeyPath使用“sectionIdentifier”
  • 对不起,我没有提,但我提了。那是行不通的。
  • 到底发生了什么? fetchedResultsController 是否返回分段结果?您如何设置视图的标题?
  • 您的NSFetchedResultsController 看起来如何?为了能够使用sectionNameKeyPath,您需要与第一个排序描述符相同的属性
  • 感谢您的帮助! ;-) 请查看上面的更新

标签: ios core-data nsfetchedresultscontroller


【解决方案1】:

使用@objc 作为你的sectionIdentifier

示例:

@objc var sectionIdentifier: String {
    get {
        return ""
    }
}

【讨论】:

  • 这为我修好了!
  • 你拯救了我的一天!
猜你喜欢
  • 2012-05-15
  • 1970-01-01
  • 2011-06-18
  • 1970-01-01
  • 2011-05-24
  • 1970-01-01
  • 2011-09-30
  • 1970-01-01
  • 2012-02-19
相关资源
最近更新 更多