Swift - 按部分对核心数据进行排序
Posted
技术标签:
【中文标题】Swift - 按部分对核心数据进行排序【英文标题】:Swift - Sorting core data in sections 【发布时间】:2015-01-01 23:13:03 【问题描述】:我已经设法按字母顺序对从核心数据接收到的数据进行排序,现在我想将用户名放在每个字母的部分中。我知道最简单的方法是使用 NSFetchedResultsController,但我不知道如何使用它(很少有关于 Swift 的教程)。
所以我的代码如下所示:
override func viewDidAppear(animated: Bool)
let appDel:AppDelegate = UIApplication.sharedApplication().delegate as AppDelegate
let context:NSManagedObjectContext = appDel.managedObjectContext!
let freq = NSFetchRequest(entityName: "Message")
let en = NSEntityDescription.entityForName("Message", inManagedObjectContext: context)
let fetchRequest = NSFetchRequest(entityName: "Message")
let sortDescriptor = NSSortDescriptor(key: "username", ascending: true)
fetchRequest.sortDescriptors = [sortDescriptor]
myList = context.executeFetchRequest(fetchRequest, error: nil) as [Model]
tv.reloadData()
func numberOfSectionsInTableView(tableView: UITableView) -> Int
return 1
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int
return myList.count
我希望有人能对 NSFetchedResultsController 有所了解并帮助我继续前进。
如果我没有完全错,初始化看起来像这样,虽然我无法弄清楚“缓存名称”:
let resultsController = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext: myList, sectionNameKeyPath: "username", cacheName: <#String?#>)
任何关于如何进行的建议将不胜感激。
【问题讨论】:
您是否阅读过描述cacheName
参数的NSFetchedResultsController class documentation?其中哪一部分没有意义?
@TomHarrington 这实际上根本不是一个简单的答案。它涉及瞬态核心数据、NSManagedObject 子类化,然后最终使用 NSFetchedResultsController ......并且不需要缓存。我正在考虑写一个答案,但它会很长......
什么是“瞬态”核心数据?
@TomHarrington 这是一种非标准的持久核心数据属性,用于在核心数据中创建临时和动态的“用户名初始”属性,以供 NSFetchedResultsController 使用。此 Apple 文档中提供的信息:developer.apple.com/library/mac/documentation/Cocoa/Conceptual/…
哦,瞬态属性
【参考方案1】:
您可以通过复制和调整 Xcode 模板中的代码来轻松设置获取结果控制器。 (新建一个项目,Master-Detail,勾选“Use Core Data”,从MasterViewController复制。)
以下不是理想的解决方案,但我认为它适合您的经验水平。当您将username
属性添加到Message
实体对象时,还要添加另一个带有第一个字母的属性。然后在创建获取结果控制器时使用这个新属性的 name 作为sectionNameKeyPath
参数。
不要太担心缓存参数。您可以将任何字符串放在那里,例如"Root"
,或者甚至传递nil
以不使用缓存,这在大多数用例中也可以。
【讨论】:
以上是关于Swift - 按部分对核心数据进行排序的主要内容,如果未能解决你的问题,请参考以下文章