核心数据 – CoreData Swift和瞬态属性getter
发布时间:2020-12-14 05:49:53 所属栏目:百科 来源:网络整理
导读:在Swift中使用Core Data时有关实现计算属性的任何建议吗? 使用生成的ManagedObject类,我试图覆盖getter但是我收到错误: ‘NSManaged’ not allowed on computed properties 这意味着您无法覆盖瞬态(计算)属性的getter. 在下面的代码示例中,dateDue被定义为
在Swift中使用Core Data时有关实现计算属性的任何建议吗?
使用生成的ManagedObject类,我试图覆盖getter但是我收到错误:
这意味着您无法覆盖瞬态(计算)属性的getter. 在下面的代码示例中,dateDue被定义为模型中的瞬态属性. 请注意,@ NSManaged行是由Xcode生成的 – 不是由我添加的. @NSManaged var timeStamp: NSDate @NSManaged var dateDue: String { get { self.willAccessValueForKey("dateDue") var ddtmp = self.primitiveValueForKey("dateDue") as String? self.didAccessValueForKey("dateDue") if (ddtmp == nil) { let calendar = NSCalendar.currentCalendar() let components = calendar.components((NSCalendarUnit.YearCalendarUnit | NSCalendarUnit.MonthCalendarUnit ),fromDate: self.timeStamp) ddtmp = "(components.year * 1000 + components.month)" self.setPrimitiveValue(ddtmp,forKey: "dateDue") } return ddtmp! } }
首先,在数据模型中创建一个瞬态属性(section).因为它是瞬态的,所以它不是物理存储的,因此不存储在托管对象上下文中.
section属性如下所示: 该实体显示在此处: 类NSManagedObject子类应该具有计算’section’属性.此处显示了演示如何完成此操作的NSManagedObject子类: class Number: NSManagedObject { @NSManaged var number: NSNumber var section: String? { return number.intValue >= 60 ? "Pass" : "Fail" } } 然后,必须将NSFetchedResultsController初始化程序中的sectionForKeyPath设置为数据模型中的瞬态属性键和缓存名称(如果需要). override func viewDidLoad() { super.viewDidLoad() fetchedResultsController = NSFetchedResultsController(fetchRequest: fetchRequest(),managedObjectContext: managedObjectContext!,sectionNameKeyPath: "section",cacheName: "Root") fetchedResultsController?.delegate = self fetchedResultsController?.performFetch(nil) tableView.reloadData() } func fetchRequest() -> NSFetchRequest { var fetchRequest = NSFetchRequest(entityName: "Number") let sortDescriptor = NSSortDescriptor(key: "number",ascending: false) fetchRequest.predicate = nil fetchRequest.sortDescriptors = [sortDescriptor] fetchRequest.fetchBatchSize = 20 return fetchRequest } 结果是一个UITableViewController,其成绩按动态传递或失败排序: 我做了一个样本项目,可以在GitHub找到. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |