Я только что обновил проект до Swift 5.0 и обновил Realm и RealmSwift с 2.8.3 до 3.14.2.
Раньше проект работал нормально, но теперь он падает на следующем простом примере:
Определение:
class Subscription : Object {
dynamic var expiryDate = Date()
dynamic var productId = Product.SubscriptionID
}
Реализация:
let query = NSPredicate(format:"productId == %@", productId)
let subs = Array(realm.objects(Subscription.self).filter(query))
с ошибкой
Terminating app due to uncaught exception 'Invalid property name', reason: 'Property 'productId' not found in object of type 'Subscription''
Изменилось ли что-нибудь в RealmSwift, что может вызвать эти ошибки?
struct Product { static let SubscriptionID = "com.company.appName" }
Поля объекта должны иметь объявления @objc
— добавьте их и повторите попытку.
Спасибо @ChrisShaw, это правильный ответ.
Если вы будете следовать всем примерам в документации Realm, вы увидите, что все поля объявлены как @objc
, так и dynamic
. Поэтому, если вы измените свои определения, как показано ниже, проблема должна быть решена: -
class Subscription : Object {
@objc dynamic var expiryDate = Date()
@objc dynamic var productId = Product.SubscriptionID
}
dynamic var productId = Product.SubscriptionID
- что это? Как определяетсяProduct
?