2017-06-12 40 views
0

我跟着这个建议: Format sectionNameKeyPath NSFetchedResultsController - SwiftsectionNameKeyPath NSFetchedResultsController被忽略 - 斯威夫特

我有一个有点问题,与此实现。 使用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中输入“date”时,我得到与上面提到的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") 

结果:无段 No Sections

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

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

它看起来像这样: Sections

更新2: 当使用sortDescriptor的建议,我得到一个崩溃(“sectionIdentifier不是在实体):

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 
+0

使用 “sectionIdentifier” 为'sectionNameKeyPath' –

+0

对不起,我没有提到它,但我做到了。这是不行的。 – sidetrax

+0

究竟发生了什么? fetchedResultsController是否返回分段结果?你如何设置视图的标题? –

回答

0

使用@objc您sectionIdentifier

样品:

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

这没有什么区别。 – vadian

0

这是不可能使用瞬时或计算的变量sectionNameKeyPath

一种解决方法是声明sectionIdentifier作为extensionDate

extension Date { 
    var sectionIdentifier: String 
    { 
     let dateFormatter = DateFormatter() 
     dateFormatter.dateFormat = "yyyy-MMM-dd" 
     return dateFormatter.string(from: self) 
    } 
} 

然后创建第一个排序描述符

let sortDescriptor1 = [NSSortDescriptor(key: "date.sectionIdentifier", ascending: false)