Как использовать NSPredicate для поиска ObjectID атрибута отношения с помощью CoreData в Swift 5? - PullRequest
1 голос
/ 22 апреля 2020

Я столкнулся с проблемой с моей базой данных CoreData при попытке использовать NSPredicate - только для извлечения данных , которые принадлежат указанному c профилю .

let request: NSFetchRequest<Data> = Data.fetchRequest()

let predicate = NSPredicate(format: "ofProfile.name MATCHES %@", selectedProfile.name)
request.predicate = predicate

do {
    let result = try context.fetch(request)
} catch {
    print("Error fetching data: \(error)")
}
! The entity Data got a ofProfile attribute which is a One - To - Many Relationship to the Profile Entity

Моя проблема в том, что profile.name attribute не уникален, поскольку может иметь несколько профилей с одинаковым именем. нет атрибута, который был бы уникальным на 100% .

Итак, вот мой вопрос: есть ли способ получить данные только одного указанного профиля c, не имея уникального атрибут. Может быть, использовать ObjectID активного профиля?

Я надеюсь, что вы, ребята, можете придумать решение этой проблемы. Заранее большое спасибо за помощь.

Ответы [ 2 ]

1 голос
/ 22 апреля 2020

Если у вас есть объект Profile и wi sh для извлечения Data объектов, связанных с ним, вы можете использовать:

let predicate = NSPredicate(format: "ANY ofProfile == %@", selectedProfile)

(если это отношение ко многим), или

let predicate = NSPredicate(format: "ofProfile == %@", selectedProfile)

(если это к одному).

Но в равной степени, если у вас есть обратные отношения (и вы, вероятно, должны), скажем, называется data, тогда вы можете используйте это без необходимости извлечения:

let relatedData = selectedProfile.data
0 голосов
/ 22 апреля 2020

Прежде всего, не называйте пользовательский класс Data. В структуре Foundation есть структура Data.

Ошибка говорит о том, что ofProfile является NSSet, поэтому вы не можете применить этот предикат.

Возможное решение - поиск в тип ofProfile для записей, которые соответствуют именам и Data .

...