Considere o seguinte relacionamento em SwiftData:
@Model
class Category: Decodable, Identifiable {
var id: Int
var title: String
@Relationship var questions = [Question]()
}
@Model
class Question: Decodable, Identifiable {
var id: Int
@Relationship var category: Category?
}
O problema ocorre quando tento buscar todas as questões de uma categoria após salvá-las:
let catId = 7
let categoryPredicate = #Predicate<Category> { $0.id == catId }
let categoryDescriptor = FetchDescriptor(predicate: categoryPredicate)
let categories = try modelContext.fetch(categoryDescriptor)
if let cat = categories.first {
cat.questions = parsedQuestions
}
//now try to fetch the questions out of the modelContext so they can be used and updated
let questionPredicate = #Predicate<Question> { $0.category.id == catId } //THIS LINE THROWS THE ERRORS
let questionDescriptor = FetchDescriptor(predicate: questionPredicate)
do {
questions = try modelContext.fetch(questionDescriptor)
} catch {
fatalError("unable to find any questions for \(category.title)")
}
Eu recebo este conjunto de erros:
O parâmetro genérico 'ID' não pôde ser inferido
O método de instância de referência 'id' em 'Opcional' requer que 'Categoria' esteja em conformidade com 'Visualização'
Tipo '(ID) -> alguma Visualização' não pode estar em conformidade com 'BinaryInteger'
Como posso compor um predicado adequado sem erros neste caso?
Como seu relacionamento é opcional, você precisa usar opcional em seu predicado