Swift - 按部分对核心数据进行排序
Swift - Sorting core data in sections
我已经设法按字母顺序对从我的核心数据中接收到的数据进行排序,现在我想将用户名按每个字母分成几个部分。我知道最简单的方法是使用 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 并帮助我继续前进。
如果我没有完全错的话,初始化看起来像这样,虽然我无法弄清楚 "cache name":
let resultsController = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext: myList, sectionNameKeyPath: "username", cacheName: <#String?#>)
如有任何关于如何进行的建议,我们将不胜感激。
您可以通过复制和调整 Xcode 模板中的代码轻松设置抓取结果控制器。 (新建项目,Master-Detail,勾选"Use Core Data",从MasterViewController复制过来。)
以下不是理想的解决方案,但我认为它适合您的经验水平。当您将 username
属性添加到 Message
实体对象时,还要添加另一个带有第一个字母的属性。然后在创建fetched results controller的时候使用这个新属性的name作为sectionNameKeyPath
参数
不要太担心缓存参数。您可以在那里放置任何字符串,例如 "Root"
,甚至可以传递 nil
以不使用缓存,这在大多数情况下也很好。
我已经设法按字母顺序对从我的核心数据中接收到的数据进行排序,现在我想将用户名按每个字母分成几个部分。我知道最简单的方法是使用 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 并帮助我继续前进。
如果我没有完全错的话,初始化看起来像这样,虽然我无法弄清楚 "cache name":
let resultsController = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext: myList, sectionNameKeyPath: "username", cacheName: <#String?#>)
如有任何关于如何进行的建议,我们将不胜感激。
您可以通过复制和调整 Xcode 模板中的代码轻松设置抓取结果控制器。 (新建项目,Master-Detail,勾选"Use Core Data",从MasterViewController复制过来。)
以下不是理想的解决方案,但我认为它适合您的经验水平。当您将 username
属性添加到 Message
实体对象时,还要添加另一个带有第一个字母的属性。然后在创建fetched results controller的时候使用这个新属性的name作为sectionNameKeyPath
参数
不要太担心缓存参数。您可以在那里放置任何字符串,例如 "Root"
,甚至可以传递 nil
以不使用缓存,这在大多数情况下也很好。