使用NSFetchedResultsController对描述符进行排序 – Swift
发布时间:2020-12-14 02:26:02 所属栏目:百科 来源:网络整理
导读:我有一个UITableView从Core Data提供,NSFetchedResultsController返回Location实体.默认排序(和节标题)是通过实体名称的第一个字母.这是有效的(尽管我仍然试图将大小写合并到相同的部分.)用户可以选择按三个可选类别之一(实体的属性)对表进行排序,然后对这些
我有一个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] (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |