Swift   发布时间:2022-03-31  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了使用NSFetchedResultsController对描述符进行排序 – Swift大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

概述

我有一个UITableView从Core Data提供,NSFetchedResultsController返回LOCATIOn实体.默认排序(和节标题)是通过实体名称的第一个字母.这是有效的(尽管我仍然试图将大小写合并到相同的部分.)用户可以选择按三个可选类别之一(实体的属性)对表进行排序,然后对这些类别进行排序按实体名称. 当我设置按类别排序时,我得到以下运行时错误: [_TtCSs23_Co
我有一个UITableView从Core Data提供,NSFetchedResultsController返回LOCATIOn实体.认排序(和节标题)是通过实体名称的第一个字母.这是有效的(尽管我仍然试图将大小写合并到相同的部分.)用户可以选择按三个可选类别之一(实体的属性)对表进行排序,然后对这些类别进行排序按实体名称.

当我设置按类别排序时,我得到以下运行时错误

[_TtCSs23_ContiguousArrayStorage00007F80513B59D0 key]: unrecognized SELEctor sent to instance 0x7f80513b5720

这是我的NSFetchedResultsController:

var sectionNameKeyPathString1: String?
var sectionNameKeyPathString2: String?

var fetchedResultsController: NSFetchedResultsController {
    if _fetchedResultsController != nil {
        return _fetchedResultsController!
    }

    let fetchrequest = NSFetchrequest()
    // Edit the entity name as appropriate.
    let entity = NSEntityDescription.entityForName("LOCATIOn",inManagedObjectContext: self.managedObjectContext!)
    fetchrequest.entity = entity

    // Set the batch size to a suitable number.
    fetchrequest.fetchBatchSize = 20

    // Edit the sort key as appropriate.
    if sectionNameKeyPathString1 != nil {
        let sortDescriptor1 = NSSortDescriptor(key: sectionNameKeyPathString1!,ascending: truE)
        let sortDescriptor2 = NSSortDescriptor(key: sectionNameKeyPathString2!,ascending: truE)
        let sortDescriptors = [sortDescriptor1,sortDescriptor2]
        fetchrequest.sortDescriptors = [sortDescriptors]
    } else {
        let sortDescriptor = NSSortDescriptor(key: "LOCATIOnName",ascending: truE)
        fetchrequest.sortDescriptors = [sortDescriptor]
    }

    var sectionNameKeyPath: String
    if sectionNameKeyPathString1 == nil {
        sectionNameKeyPath = "firstLetterAsCap"
    } else {
        sectionNameKeyPath = sectionNameKeyPathString1!
    }

    // Edit the section name key path and cache name if appropriate.
    // nil for section name key path means "no sections".
    let aFetchedResultsController = NSFetchedResultsController(fetchrequest: fetchrequest,managedObjectContext: self.managedObjectContext!,sectionNameKeyPath: sectionNameKeyPath,cachename: "LOCATIOns")
    aFetchedResultsController.delegate = self
    _fetchedResultsController = aFetchedResultsController

    var error: NSError? = nil
    if !_fetchedResultsController!.performFetch(&error) {
        // TODO: Handle this error
        // replace this implementation with code to handle the error appropriately.
        // abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application,although it may be useful during development.
        //println("Unresolved error \(error),\(error.userInfo)")
        abort()
    }

    return _fetchedResultsController!
}

使用断点我很有信心,例如,sectionNameKeyPathString1 =“category1”和sectionNameKeyPathString2 =“LOCATIOnName”以及sectionNameKeyPath =“category1”,因此键路径与第一个排序描述符匹配.

我有这个在Obj-C工作,但现在我把我的头发拉出来,确定我患有虫病.

是你有太多[]?
let sortDescriptors = [sortDescriptor1,sortDescriptor2] // <- an [NSSortDescriptor]
    fetchrequest.sortDescriptors = [sortDescriptors] // <- Now an [[NSSortDescriptor]]

应该只是:

fetchrequest.sortDescriptors = [sortDescriptor1,sortDescriptor2]

大佬总结

以上是大佬教程为你收集整理的使用NSFetchedResultsController对描述符进行排序 – Swift全部内容,希望文章能够帮你解决使用NSFetchedResultsController对描述符进行排序 – Swift所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。