NSSortDescriptor 使用实体的 NSDate 属性(Swift)
Posted
技术标签:
【中文标题】NSSortDescriptor 使用实体的 NSDate 属性(Swift)【英文标题】:NSSortDescriptor using NSDate attribute of Entity (Swift) 【发布时间】:2015-04-01 12:50:05 【问题描述】:我有一个类似于this one 的问题,但有一点不同。
我想知道当核心数据模型如下时,如何在获取请求中返回特定属性(在本例中为“权重”):
客户>评估('Assessment'有一个权重属性)
这是我的客户端类:
@objc(Client)
class Client: NSManagedObject
@NSManaged var name: String
@NSManaged var assessment: NSSet
还有我的评估课:
@objc(Assessment)
class Assessment: NSManagedObject
@NSManaged var weight: Int16
@NSManaged var nsDateOfAssessment: NSDate
@NSManaged var client: Client
这是我的获取请求。我知道现在我的“权重”数组正在填充托管对象,但我需要的是填充“权重”属性的整数,并按我的日期“nsDateOfAssessment”排序,如 cmets 中所述编码。然后我反过来使用该数组来填充图表。
var client: Client! = nil
var weights = []
func weightFetchRequest() -> NSFetchRequest
let appDelegate = UIApplication.sharedApplication().delegate as AppDelegate
let managedContext = appDelegate.managedObjectContext!
let fetchRequest = NSFetchRequest(entityName: "Assessment")
var error: NSError?
//Something for getting only 'weight' attribute of assessment
//Something for sorting 'weights' array by the date attribute 'nsDateOfAssessment' of 'Assessment'
let fetchedResults = managedContext.executeFetchRequest(fetchRequest, error: &error) as [NSManagedObject]?
if let results = fetchedResults
weights = results
else
println("Could not fetch \(error), \(error!.userInfo)")
println(weights)
return fetchRequest
如果有更简单的方法,我们将不胜感激。
【问题讨论】:
查看 NSFetchRequest 的文档,特别是 sortDescriptors、谓词和 propertiesToFetch 成员。 【参考方案1】:您可以通过在 NSFetchRequest 上设置 sortDescriptor 来进行排序。根据您希望结果是升序还是降序传递 true 或 false。
var fetchRequest = NSFetchRequest(entityName: "Assessment")
fetchRequest.sortDescriptors = [NSSortDescriptor(key: "nsDateOfAssessment", ascending: false)]
然后您可以使用高阶函数来映射结果以仅获取您想要的权重属性
let fetchedResults = managedContext.executeFetchRequest(fetchRequest, error: &error) as [Assessment]?
注意我是如何将它设置为您的子类 NSManagedObject 的数组
if let assessments = fetchedResults
let weights = assessments.map assessment in assessment.weight
【讨论】:
以上是关于NSSortDescriptor 使用实体的 NSDate 属性(Swift)的主要内容,如果未能解决你的问题,请参考以下文章
仅将 NSSortDescriptor 应用于由 NSFetchedResultsController 的 NSPredicate 过滤的实体
NSFetchedResultsController 与许多 NSSortDescriptor