NSFetchedResultsController不使用瞬态属性

时间:2017-06-28 14:00:06

标签: ios core-data nsfetchedresultscontroller swift4

使用Xcode8.3在Swift 3中正常工作

我正在进行一个项目,其中包含用于保存消息的核心数据 它根据时间对消息进行排序,并根据日期对其进行分区。

以下是:

let request = NSFetchRequest(entityName: "Message")
let sortDiscriptor = NSSortDescriptor(key: "time", ascending: true)
request.sortDescriptors = [sortDiscriptor]

fetchedResultsController = NSFetchedResultsController(fetchRequest: request, managedObjectContext: mainThreadMOC, sectionNameKeyPath: "sectionTitle", cacheName: nil)
fetchedResultsController.delegate = self
do {
    try fetchedResultsController.performFetch()
} catch {
    fatalError("Failed to initialize FetchedResultsController: \(error)")
}

这是瞬态属性:

var sectionTitle: String? {
    //this is **transient** property
    //to set it as transient, check mark the box with same name in data model
    return time!.getTimeStrWithDayPrecision()
}

将其用作:

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
  let sectionInfo = fetchedResultsController.sections![section]
  let n =  sectionInfo.numberOfObjects
  return n
}

它始终提供0个部分,sectionTitle属性永远不会被调用。

此设置在Xcode8.3中与Swift3正常工作 甚至这也适用于Xcode9-beta中的Swift3.2 但是,如果我在Xcode9-beta中切换到Swift4,它就无法正常工作。

1 个答案:

答案 0 :(得分:3)

将@objc添加到transient属性中,所以:

Commit