Ios RealmSwift查询中带内部对象引用的谓词存在问题

Ios RealmSwift查询中带内部对象引用的谓词存在问题,ios,realm,swift4,Ios,Realm,Swift4,我有一门报告课,比如: class Report: Object{ @objc dynamic var id : String? = nil @objc dynamic var studentProfileId : String? = nil @objc dynamic var createdAt : String? = nil @objc dynamic var updatedAt : String? = nil @objc dynamic var type :

我有一门报告课,比如:

class Report: Object{

   @objc dynamic var id : String? = nil
   @objc dynamic var studentProfileId : String? = nil
   @objc dynamic var createdAt : String? = nil
   @objc dynamic var updatedAt : String? = nil
   @objc dynamic var type : String? = nil
   @objc dynamic var status : String? = nil
   @objc dynamic var assessment : AssessmentLocal? = nil
   var avgScore = RealmOptional<Double>(0)
}
每当我试图获取保存的报告时,我都会遇到崩溃


“以NSException类型的未捕获异常终止”


我无法理解这一点。

发生错误可能是因为您的类型与Realm所期望的不同

assessment.cycle
assessment.year
是整数,因此不应使用
%@
作为它们的占位符<代码>%@用于字符串。您应该对整数使用
%i

您还应该删除参数中对字符串的转换

let predicate = NSPredicate(format: "studentProfileId = %@ AND assessment.year = %i AND assessment.cycle >= %i", 
                            report.studentProfileId!, 
                            report.assessment?.year.value!, 
                            report.assessment?.cycle!
                            )

你也可以这样做

let predicate = NSPredicate(format: "studentProfileId = %@ AND assessment.year = \(report.assessment?.year.value!) AND assessment.cycle >= \(report.assessment?.cycle!)", report.studentProfileId!)

“以NSException类型的未捕获异常终止”并没有告诉您多少。在那一行之后或之前写了什么?
let predicate = NSPredicate(format: "studentProfileId = %@ AND assessment.year = %i AND assessment.cycle >= %i", 
                            report.studentProfileId!, 
                            report.assessment?.year.value!, 
                            report.assessment?.cycle!
                            )
let predicate = NSPredicate(format: "studentProfileId = %@ AND assessment.year = \(report.assessment?.year.value!) AND assessment.cycle >= \(report.assessment?.cycle!)", report.studentProfileId!)