Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/95.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iOS Swift筛选器阵列在运行时使用NSPredicate崩溃_Ios_Swift_Nspredicate - Fatal编程技术网

iOS Swift筛选器阵列在运行时使用NSPredicate崩溃

iOS Swift筛选器阵列在运行时使用NSPredicate崩溃,ios,swift,nspredicate,Ios,Swift,Nspredicate,我有一个细胞模型 struct BeerCellModel: Hashable { var beer: Beer static func == (lhs: BeerCellModel, rhs: BeerCellModel) -> Bool { return lhs.beer.id == rhs.beer.id } var hashValue: Int { return self.beer.id } } 及 现

我有一个细胞模型

struct BeerCellModel: Hashable {

    var beer: Beer

    static func == (lhs: BeerCellModel, rhs: BeerCellModel) -> Bool {
        return lhs.beer.id == rhs.beer.id
    }

    var hashValue: Int {
        return self.beer.id
    }
}

现在我有了一个以上单元模型的数组名'items=[BeerCellModel],我正在使用param
style

let value = ["tuborg", "budwiser", "bira"]
let query = value.map { "SELF.beer.style CONTAINS[cd] \($0)" }.joined(separator: " || ")
let predicate = NSPredicate(format: query)
let results = self.items.filter { predicate.evaluate(with: $0) }
但我正在运行时崩溃

2018-08-08 00:38:01.787170+0530蜂窝筏[3388:401950]*** 由于未捕获异常“NSUnknownKeyException”而终止应用程序, 原因:'[valueForUndefinedKey:]:此 类与键的键值编码不兼容。'

数组或谓词中有什么错误

更新:添加啤酒的JSON响应

  {
    "abv": "0.08",
    "ibu": "35",
    "id": 11,
    "name": "Monks Blood",
    "style": "Belgian Dark Ale",
    "ounces": 12
  },
  {
    "abv": "0.07",
    "ibu": "65",
    "id": 10,
    "name": "Brew Free! or Die IPA",
    "style": "American IPA",
    "ounces": 12
  },
  {
    "abv": "0.04",
    "ibu": "17",
    "id": 9,
    "name": "Hell or High Watermelon Wheat",
    "style": "Fruit / Vegetable Beer",
    "ounces": 12
  }

看起来您试图映射的是
字符串的数组,而不是
BeerCellModel
结构的数组。

此时,无需处理
NSPredicate
,对于您的情况,
过滤器
方法就足够了,如下所示:

let filtered = items.filter { value.contains($0.beer.style) }
filtered
BeerCellModel
的数组,它应该包含其
beer.style
数组元素之一的对象

你可以试试

let value = ["tuborg", "budwiser", "bira"]
let query = value.map { "self CONTAINS[cd] '\($0)'" }.joined(separator: " || ")
let predicate = NSPredicate(format: query)
let results = self.items.filter { predicate.evaluate(with: $0.beer.style) }

你能添加
BeerCellModel
数组并说明预期结果是什么吗?@AhmadF:预期结果应该给出与值数组中的样式匹配的项目。你可以添加
BeerCellModel
(在你的代码片段中似乎是
),这样我可以在发布之前测试我的答案:)@AhmadF:你可以制作虚拟模型并测试它。我也添加了JSON,您可能只是指
NSPredicate(格式:“beer.style IN%@”,value)
错误,我在过滤器中添加了谓词查询。谷歌将其作为参考,这似乎不是解决问题的尝试。对于澄清,你应该使用注释。你能解释一下吗
let value = ["tuborg", "budwiser", "bira"]
let query = value.map { "self CONTAINS[cd] '\($0)'" }.joined(separator: " || ")
let predicate = NSPredicate(format: query)
let results = self.items.filter { predicate.evaluate(with: $0.beer.style) }