Фильтрация целых чисел из NSManaged объекта - PullRequest
0 голосов
/ 06 июня 2019

У меня есть следующее свойство основных данных

@NSManaged public var part: [Int]?

, и оно может содержать 0 или 1 или оба.Я пытаюсь отфильтровать part, который содержит 1 и сделал это

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

Но я получаю сообщение об ошибке

Тема 1: EXC_BAD_ACCESS (code = 1, address= 0x1)

, если я сделаю выше.Что я здесь не так делаю?Заранее спасибо.

Ответы [ 4 ]

1 голос
/ 06 июня 2019

код, который вы написали, т.е.

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 })
1 голос
/ 06 июня 2019

Просто используйте ниже код:

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

Вы получите желаемый результат. Надеюсь, это поможет.

0 голосов
/ 06 июня 2019

Для этого можно использовать фильтр (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]
0 голосов
/ 06 июня 2019

Вы можете достичь того же, используя 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]

...