#ios #swift #core-data #corestore
#iOS #swift #основные данные #corestore
Вопрос:
Я пытаюсь извлечь все объекты из класса Match
, который Discipline
содержится в массиве дисциплин.
Вот код для выборки, который не работает:
let disciplines: [Discipline] = ...
try CoreStoreDefaults.dataStack.fetchAll(From<Match>().where(Where<Match>(.$discipline, isMemberOf: disciplines)))
Ошибка компилятора, которую я получаю, такова:
Key path value type 'FieldContainer<Match>.Relationship<Discipline?>' cannot be converted to contextual type 'RelationshipContainer<Match>.ToOne<Discipline>'
Вот класс соответствия:
final class Match: CoreStoreObject {
@Field .Stored("date", dynamicInitialValue: { Date() })
var date: Date
@Field .Stored("winnersPoints")
var winnersPoints: Double = 0
@Field .Stored("loosersPoints")
var loosersPoints: Double = 0
@Field .Relationship("discipline")
var discipline: Discipline?
@Field .Relationship("winners")
var winners: [Player]
@Field .Relationship("loosers")
var loosers: [Player]
}
Вот класс Disciple:
final class Discipline: CoreStoreObject {
@Field .Stored("name")
var name: String = ""
@Field .Relationship("matches", inverse: .$discipline)
var matches: [Match]
}
Что именно я здесь делаю не так?
Ответ №1:
Я также ответил на ваш вопрос в разделе проблем с CoreStore.
В инициализаторах отсутствовала перегрузка Where
, которую я добавлю в следующем обновлении, но вы также можете использовать ~=
оператор в качестве сокращенного синтаксиса:
try CoreStoreDefaults.dataStack.fetchAll(
From<Match>()
.where(disciplines ~= .$discipline)
)