【发布时间】:2014-10-21 11:03:24
【问题描述】:
我目前正在用 Swift 编写一个简单的电话簿应用程序,需要对 CoreData 查询的结果进行排序。
基本上,我设置了一个名为“Directory”的 NSManagedObject,其中包含适当的字段名称 - 例如“name_f”是用户名。
CoreData 数据库中被查询的名字是按字母顺序排列的。然而,虽然第一次搜索按字母顺序返回结果,但有时在程序的其他区域查询数据库之后,进一步的搜索不会。我不知道为什么会这样,但想输入代码以按任何字段对返回的数组进行主动排序。
我返回 NSManagedObject 数组的代码如下:
func SearchName(nameToSearch: String) -> NSArray {
let appDel:AppDelegate = UIApplication.sharedApplication().delegate as AppDelegate
let context:NSManagedObjectContext = appDel.managedObjectContext! //I added the !
let request = NSFetchRequest(entityName: "Directory")
request.returnsObjectsAsFaults = false //will return the instance of the object
//request.predicate = NSPredicate(format: "name_f = %@", nameToSearch)
//request.predicate = NSPredicate(format: "name_f MATCHES '.*(\(nameToSearch)).*'")
request.predicate = NSPredicate(format: "name_f MATCHES[cd] '(\(nameToSearch)).*'")
var results:NSArray = context.executeFetchRequest(request, error: nil)
return results
}
顺便说一句,我使用以下代码从返回的结果中提取特定值(其中 searchResult 是 SearchName 所在类的实例):
var particularEntry = self.searchResult[self.selectedItem] as Directory
lblDetailName.text = thisPerson.name_f
理想情况下,我希望能够: 1 - 修改上面的代码以确保“结果”数组正确排序。 2 - 识别随后可应用于结果数组以按任何字段重新排序的代码。
提前致谢!
【问题讨论】:
-
您查看过
NSPredicate的sortDescriptors属性吗? 《Core Data Programming Guide》也有很多例子(Objective-C),见developer.apple.com/library/mac/documentation/Cocoa/Conceptual/…。 -
sortDescriptors 是 NSFetchRequest 的属性。我不认为 NSPredicate 有这样的属性。
-
@insane-36:你说得对,我的意思是 NSFetchRequest。
标签: arrays search core-data swift nsmanagedobject