2017-06-12 38 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)