从NSManaged对象中过滤出整数

时间:2019-06-06 12:07:23

标签: ios swift nspredicate

我具有以下核心数据属性

@NSManaged public var part: [Int]?

,它可以包含0或1或两者。我试图过滤出包含1的part,并做到了

 fetchRequest.predicate = NSPredicate(format:"part == %@", 1)

但是我得到了错误

  

线程1:EXC_BAD_ACCESS(代码= 1,地址= 0x1)

如果我执行以上操作。我在这里做错了什么?预先感谢。

4 个答案:

答案 0 :(得分:1)

只需使用以下代码:

let filteredArray = part.filter() { $0 == 1 }
print(filteredArray.count)

您将获得理想的结果。希望这会有所帮助。

答案 1 :(得分:1)

您编写的代码,即

fetchRequest.predicate = NSPredicate(format:"part == %@", 1)

在上面的代码中,您尝试根据是否filter fetched rowspart is 1 or not。因此,基本上,您在这里将part用作Int。但是根据声明,partarray [Int]

肯定会throwexception

您需要像filter each row after fetching一样

let filteredPart = part.filter({ $0 == 1 })

答案 2 :(得分:0)

您也可以使用谓词实现相同的目的: 使用以下代码:

let part = [1,3,4,7,2,1,4,3,1,5,6,7,1,3,4,8,9,1]
let predicate = NSPredicate(format: "SELF == %d",1)
let result = (part as NSArray).filtered(using: predicate)
print(result)
  

输出:

     

[1,1,1,1,1]

答案 3 :(得分:0)

您可以为此(Swift 4.2)使用过滤器

let arrInt = [1,0,0,0,0,1,0,1,1,0,0,0,0,0,1,0,0,1,0,0,1]

 let ones = arrInt.filter({$0 == 1})

 print(ones)

输出:

 [1, 1, 1, 1, 1, 1, 1]