使用RealmSearchViewController

时间:2016-04-08 23:21:21

标签: ios realm

概述: 我试图让一个搜索栏根据输入文本搜索不同的属性。例如,如果我有一个带有“姓名”和“数字”的地址簿,我希望搜索栏上的字符串搜索“名称”,如果在搜索栏中输入了Int,则搜索“数字”。 (就像iPhone的手机应用程序一样)

采取的步骤:

1)我已经在Realm的教程中实现了RealmSearchViewController。 (https://realm.io/news/building-an-ios-search-controller-in-swift/

2)我已经研究了如何通过初始化分配searchPropertyKeyPath属性。 (如果对任何人有帮助,请参见下文)

  

必需的init?(编码器aDecoder:NSCoder){           super.init(编码器:aDecoder)           self.searchPropertyKeyPath =“PhoneNumber”           打印(“你好”)           print(“Searchbar:”,self.searchBar.text)       }

问题: 我无法弄清楚如何a)扫描searchbar.text [检查它是否为int或string]然后b)修改searchPropertyKeyPath [以搜索相应的属性]。

关于如何解决此问题的任何观点?

(我的猜测是覆盖然后修改RealmSwiftViewController文件中的refreshSearchResults()函数。是的,我试过这个,但遇到了编码问题,我不想在这个问题中提出来)

3 个答案:

答案 0 :(得分:4)

Realm使用Changerequest.joins{[changerequest_statuses, subquery.as('max_status').on { id == max_status.changerequest_id}]} 进行查询,NSPredicate可以轻松使用NSPredicate查询多个属性:

NSCompoundPredicate

要了解有关NSPredicate语法的更多信息,请参阅Realm's NSPredicate Cheatsheet

答案 1 :(得分:0)

感谢那些回复的人,我的解决方案是使用RealmSearchViewController,而是使用Realm的谓词与xcode的UISearchController一起使用本教程:https://www.raywenderlich.com/113772/uisearchcontroller-tutorial

答案 2 :(得分:0)

我的回答是一种解决方法,但它应该可以正常工作。您创建一个包含您可能要搜索的所有信息的属性,然后将其作为搜索属性。

假设您的联系人是从CSV创建的,并且您已经以某种方式将CSV信息转换为结构。为简单起见,我暂不提及任何对该领域的引用。

class Contact: Object {
    var name = ""
    var number = 0
    var fullInfo = ""
}

struct ContactInfo {
    var name: String
    var number: Int
}

func createContact(from info: ContactInfo) {
    var newContact = Contact() // your Object subclass
    newContact.name = info.name
    newContact.number = info.number
    newContact.fullInfo = "\(info.name) - \(String(info.number))"
}

然后将searchProperty设置为fullInfo

请注意,尽管将fullInfo作为计算属性很诱人,但这不起作用,因为您不能拥有searchProperty的计算属性。