Swift - 分段核心数据排序

时间:2015-01-01 23:13:04

标签: ios xcode core-data swift nsfetchedresultscontroller

我设法按字母顺序对从核心数据收到的数据进行排序,现在我想将每个字母的用户名放在各个部分中。我知道最简单的方法是使用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?#>)

有关如何继续的任何建议将不胜感激。

1 个答案:

答案 0 :(得分:1)

您可以通过复制和调整Xcode模板中的代码轻松设置获取的结果控制器。 (创建一个新项目,Master-Detail,检查&#34;使用Core Data&#34;,从MasterViewController复制。)

以下不是理想的解决方案,但我认为这适合您的经验水平。将username属性添加到Message实体对象时,还要添加带有第一个字母的另一个属性。然后在创建提取的结果控制器时,使用此新属性的 name 作为sectionNameKeyPath参数。

不要过多担心缓存参数。您可以在其中放置任何字符串,例如"Root",或者甚至将nil传递给不使用缓存,这在大多数用例中都很好。