У меня есть следующее свойство основных данных
@NSManaged public var part: [Int]?
, и оно может содержать 0 или 1 или оба.Я пытаюсь отфильтровать part, который содержит 1 и сделал это
part
fetchRequest.predicate = NSPredicate(format:"part == %@", 1)
Но я получаю сообщение об ошибке
Тема 1: EXC_BAD_ACCESS (code = 1, address= 0x1)
, если я сделаю выше.Что я здесь не так делаю?Заранее спасибо.
код, который вы написали, т.е.
В приведенном выше коде вы пытаетесь filter все fetched rows в зависимости от того, part is 1 or not. Так что в основном здесь вы используете part как Int. Но согласно декларации, part является array [Int].
filter
fetched rows
part is 1 or not
Int
array [Int]
Это определенно будет throw exception.
throw
exception
Вам нужно filter each row after fetching, как:
filter each row after fetching
let filteredPart = part.filter({ $0 == 1 })
Просто используйте ниже код:
let filteredArray = part.filter() { $0 == 1 } print(filteredArray.count)
Вы получите желаемый результат. Надеюсь, это поможет.
Для этого можно использовать фильтр (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]
Вы можете достичь того же, используя 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)
Выход: [1, 1, 1, 1, 1]
[1, 1, 1, 1, 1]