我刚刚构建了应用程序的最新版本,并且遇到了一个问题,即我的所有领域对象上的List
都没有存储。
以下是一些示例代码:
对象:
public class ReportItem: Object {
@objc dynamic var id: String!
@objc dynamic var someDate: Date?
// This contains another List as one of its properties
let list = List<OtherRealmObject>()
override public class func primaryKey() -> String {
return "id"
}
convenience public init(id: String, date: Date) {
self.init()
self.id = id
self.date = date
}
}
此对象由json映射器根据网络请求的响应创建:
// Convert json to dictionary then
guard let id = json["id"] as? String else {
return nil
}
let date = json["date"] as? Date
let objects = json["someObjects"] as? [String: Any]
let someRealmObjects = [OtherRealmObject]()
objects.forEach { object in
// Create some realm object
someRealmObjects.append(newSomeRealmObject)
}
let reportItem: ReportItem?
if let date = date?.convertToDateFromString() {
reportItem = ReportItem(id: id, date: date)
} else {
return nil
}
reportItem!.list.append(objectsIn: someRealmObjects)
return reportItem!
然后将其传递回我的视图控制器,并按如下方式存储:
// Report item is the item we just created in the json mapper
someNetworkOperation.success = { reportItem in
DispatchQueue.main.sync {
let realm = try! Realm()
try! realm.write {
realm.add(reportItem, update: true)
}
}
}
然后在其他地方检索到该项目,但是list
为空,并且当我尝试过滤时收到错误This method may only be called on RLMArray instances retrieved from an RLMRealm
。由于某种原因,当我将报表对象添加到数据库时,我的列表没有被保留。
这曾经起作用,但是在上个星期左右它已经停止起作用。我想知道是否与更新到Swift 4.2 / Xcode 10有关。而且,我的代码在调试中工作正常,而在发行版中工作正常。还有其他人遇到这个问题吗?
答案 0 :(得分:1)
这是因为在Swift 4.2转换期间,Reflection Metadata Level
设置为None
而不是All
。 ♂️