Unfortunately, I get the following error when compiling. I am getting desperate.
Cannot convert value of type 'PredicateExpressions.Equal<PredicateExpressions.KeyPath<PredicateExpressions.Variable, Object?>, PredicateExpressions.Value<Object?>>' to closure result type 'any StandardPredicateExpression'
static func getChildObjects(for object: Object, context: ModelContext) -> [Object] {
let relationPredicate = #Predicate<AttributValue> { $0.getValueAsObjectId() == object.id }
let descriptor = FetchDescriptor<AttributValue>(predicate: relationPredicate)
do {
let attributValues = try context.fetch(descriptor)
let objects = attributValuespactMap { $0.attribut?.object }
// Sortiere die Objekte nach Kategorie (alphabetisch)
return objects.sorted { $0.category.displayName < $1.category.displayName }
} catch {
print("Fehler beim Abrufen der Kind-Objekte: \(error.localizedDescription)")
return []
}
}
@Model
final class Object: Hashable {
var id: UUID
var name: String
var version: String
var category: ObjectCategory
.....
@Relationship var pattern: ObjectPattern?
@Relationship(deleteRule: .cascade) var attributes: [Attribut]
}
@Model
final class Attribut {
var id: UUID
var name: String // Technischer Name
var category: AttributCategory // siehe enum AttributCategory
var displayName: String? // Anzeigename in der UI
.....
var objectTyp: ObjectCategory? // category == .relation, dann regelt das die Relation auf ObjectCategory
// Beziehung zum ObjectPattern
@Relationship(inverse: \Object.attributes) var object: Object?
@Relationship(deleteRule: .cascade) var values: [AttributValue]
}
@Model
final class AttributValue {
// Eindeutige Identifikation des Attributwerts
var id: UUID
// Beziehung zu einem Attribut (gibt an, zu welchem Attribut dieser Wert gehört)
@Relationship var attribut: Attribut?
// Datencontainer für verschiedene Datentypen
// Diese Variabeln sind optional, da immer nur eine Variable gesetzt wird.
var integerValue: Int? // Ganzzahlwert
var numberValue: Double? // Dezimalwert
var textValue: String? // Textwert
var booleanValue: Bool? // Wahrheitswert
var dateValue: Date? // Datum/Wert
var urlValue: URL? // URL
var pickerValue: String? // Auswahl aus einem Picker (Text)
@Relationship var relationValue: Object? // Verweis auf ein anderes Objekt
....
}
´´´´
Unfortunately, I get the following error when compiling. I am getting desperate.
Cannot convert value of type 'PredicateExpressions.Equal<PredicateExpressions.KeyPath<PredicateExpressions.Variable, Object?>, PredicateExpressions.Value<Object?>>' to closure result type 'any StandardPredicateExpression'
static func getChildObjects(for object: Object, context: ModelContext) -> [Object] {
let relationPredicate = #Predicate<AttributValue> { $0.getValueAsObjectId() == object.id }
let descriptor = FetchDescriptor<AttributValue>(predicate: relationPredicate)
do {
let attributValues = try context.fetch(descriptor)
let objects = attributValuespactMap { $0.attribut?.object }
// Sortiere die Objekte nach Kategorie (alphabetisch)
return objects.sorted { $0.category.displayName < $1.category.displayName }
} catch {
print("Fehler beim Abrufen der Kind-Objekte: \(error.localizedDescription)")
return []
}
}
@Model
final class Object: Hashable {
var id: UUID
var name: String
var version: String
var category: ObjectCategory
.....
@Relationship var pattern: ObjectPattern?
@Relationship(deleteRule: .cascade) var attributes: [Attribut]
}
@Model
final class Attribut {
var id: UUID
var name: String // Technischer Name
var category: AttributCategory // siehe enum AttributCategory
var displayName: String? // Anzeigename in der UI
.....
var objectTyp: ObjectCategory? // category == .relation, dann regelt das die Relation auf ObjectCategory
// Beziehung zum ObjectPattern
@Relationship(inverse: \Object.attributes) var object: Object?
@Relationship(deleteRule: .cascade) var values: [AttributValue]
}
@Model
final class AttributValue {
// Eindeutige Identifikation des Attributwerts
var id: UUID
// Beziehung zu einem Attribut (gibt an, zu welchem Attribut dieser Wert gehört)
@Relationship var attribut: Attribut?
// Datencontainer für verschiedene Datentypen
// Diese Variabeln sind optional, da immer nur eine Variable gesetzt wird.
var integerValue: Int? // Ganzzahlwert
var numberValue: Double? // Dezimalwert
var textValue: String? // Textwert
var booleanValue: Bool? // Wahrheitswert
var dateValue: Date? // Datum/Wert
var urlValue: URL? // URL
var pickerValue: String? // Auswahl aus einem Picker (Text)
@Relationship var relationValue: Object? // Verweis auf ein anderes Objekt
....
}
´´´´
Share Improve this question asked Mar 20 at 14:01 Peter BienPeter Bien 576 bronze badges 2 |1 Answer
Reset to default 0I have solved the problem by setting a local variable.
static func getChildObjects(for object: Object, context: ModelContext) -> [Object] {
let objId = object.id
let fetchDescriptor = FetchDescriptor<AttributValue>(
predicate: #Predicate { $0.relationValue?.id == objId } // Use the local variable
)
$0.getValueAsObjectId()
, you can't use a custom function inside a predicate. What does the function do, is it really necessary? – Joakim Danielson Commented Mar 20 at 18:10