从 NSManaged 对象中过滤掉整数

Filtering out integer from NSManaged object

我有以下核心数据属性

@NSManaged public var part: [Int]?

它可能包含 0 或 1 或两者。我正在尝试过滤掉包含 1 的 part 并执行此操作

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

但我收到错误

Thread 1: EXC_BAD_ACCESS (code=1, address=0x1)

如果我这样做了。我在这里做错了什么?提前致谢。

只需使用以下代码:

let filteredArray = part.filter() { [=10=] == 1 }
print(filteredArray.count)

您会得到想要的结果。希望这有帮助。

您编写的代码,即

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

在上面的代码中,您试图 filter 所有 fetched rows 基于是否 part is 1 or not。所以基本上在这里你使用 part 作为 Int。但是根据声明,partarray [Int].

肯定会throw一个exception

您需要filter each row after fetching喜欢:

let filteredPart = part.filter({ [=11=] == 1 })

您可以使用 Predicate 实现相同的目的: 使用以下代码:

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)

Output:

[1, 1, 1, 1, 1]

您可以为此使用过滤器 (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({[=10=] == 1})

 print(ones)

输出:

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