使用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,它就无法正常工作。
答案 0 :(得分:3)
将@objc添加到transient属性中,所以:
Commit