我具有以下核心数据属性
@NSManaged public var part: [Int]?
,它可以包含0或1或两者。我试图过滤出包含1的part
,并做到了
fetchRequest.predicate = NSPredicate(format:"part == %@", 1)
但是我得到了错误
线程1:EXC_BAD_ACCESS(代码= 1,地址= 0x1)
如果我执行以上操作。我在这里做错了什么?预先感谢。
答案 0 :(得分:1)
只需使用以下代码:
let filteredArray = part.filter() { $0 == 1 }
print(filteredArray.count)
您将获得理想的结果。希望这会有所帮助。
答案 1 :(得分:1)
您编写的代码,即
fetchRequest.predicate = NSPredicate(format:"part == %@", 1)
在上面的代码中,您尝试根据是否filter
fetched rows
来part is 1 or not
。因此,基本上,您在这里将part
用作Int
。但是根据声明,part
是array [Int]
。
肯定会throw
和exception
。
您需要像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]