使用NSPredicate匹配Azure EasyTables条目的子字符串?

时间:2018-03-08 15:33:06

标签: ios sql swift azure nspredicate

我有一个iOS(Swift 4)项目设置并与Azure EasyTables数据库同步(使用Azure Mobile App QuickStart设置)。

我正在尝试根据与表格中行条目的子字符串的匹配来返回数据库结果:

表中的“members”列是一个字符串,其中包含以分号分隔的组成员ID,我想查询其“members”字段包含当前已登录用户ID的所有表条目。

因此,因为我知道'userID'将是我的某些条目的“成员”字段的子字符串,所以我使用NSPredicate以及以下方式使用关键字'CONTAINS'来查询我的数据库:

NSPredicate(format: "members CONTAINS[cd] %@", userID )

但是查询检索没有结果,即使userID显然是几个“成员”字段的子字符串。我在哪里错了?

更大背景的完整功能:

// Retrieve all groups 'user' is member of from database and return them in closure
func getGroups(forUser user: SSUser, closure: @escaping ([SSGroup]?) -> Void) {
    var groups : [SSGroup]?
    let predicate = NSPredicate(format: "members CONTAINS[cd] %@", user.userID )
    self.groupsTable.read(with: predicate) { (result, error) in
        if let err = error {
            print("ERROR: ", err)
        } else if let res = result {
            groups = []
            if let items = res.items {
                for item in items {
                    let group = SSGroup(groupID: item["id"] as? String, name: item["name"] as! String, isPublic: item["isPublic"] as! Bool)
                    print("retrieved group", group.name)
                    groups?.append(group)
                }
            }
        }
        closure(groups)
    }
}

0 个答案:

没有答案