晚上好
我正在用SwiftUI实现Realm数据库。 该数据库由一个包含“项目”的表和一个包含“度量”的表(一对多关系)组成。 主视图显示项目列表,“ Measureview”显示与所选项目相关的度量。
当我选择一个项目时,将显示度量列表,然后无法返回,该应用将崩溃(模拟器和真实设备)。 Xcode指向AppDelegate文件:线程1:EXC_BAD_ACCESS(代码= 2,地址= 0x7ffedfd5cfd8) 我知道4/5个月前,一些开发人员遇到了此问题,但我想目前Apple已解决了该问题。 请在下面找到相关代码:
领域部分:
import Foundation
import RealmSwift
import Combine
class Project : Object, Identifiable {
@objc dynamic var ProjectName = "" // primary key
@objc dynamic var ProjectCategorie = ""
@objc dynamic var ProjectCommentaire = ""
let Measures = List<Measure>() // one to many
override static func primaryKey() -> String? {
return "ProjectName"
}
}
class Measure : Object, Identifiable {
// @objc dynamic var id_Measure = UUID().uuidString // primary key
@objc dynamic var MeasureName = ""
@objc dynamic var MeasureDetail = ""
@objc dynamic var MeasureResult = ""
override static func primaryKey() -> String? {
return "MeasureName"
}
}
func createProject (_ title:String,_ categorie:String, _ commentaire:String) {
let realm = try! Realm()
let proj = Project()
proj.ProjectName = title
proj.ProjectCategorie = categorie
proj.ProjectCommentaire = commentaire
try! realm.write {
realm.add(proj)
}
}
//****************************************************************
class BindableResults<Element>: ObservableObject where Element: RealmSwift.RealmCollectionValue {
let didChange = PassthroughSubject<Void, Never>()
let results: Results<Element>
private var token: NotificationToken!
init(results: Results<Element>) {
self.results = results
lateInit()
}
func lateInit() {
token = results.observe { _ in
self.didChange.send(())
}
}
deinit {
token.invalidate()
}
}
Contentview:
struct ContentView : View {
@ObservedObject var Proj = BindableResults(results: try! Realm().objects(Project.self))
var body: some View {
NavigationView{
List(Proj.results) { item in
NavigationLink(destination: MeasureView(Pro: item) ){
ContenRowUI(Proj :item)
}
}
}
.navigationBarTitle(Text("Project List"))
}
}
测量视图:
struct MeasureView: View {
var Pro = Project() //= Project()
var body: some View {
NavigationView {
List(Pro.Measures) { item in
Text("Detail: \(item.MeasureDetail)")
}
.navigationBarTitle(Text("Measure"))
}
}
}
其他信息,如果我将Measureview替换为简单的textview,则该行为非常奇怪: 我选择一个项目,应用程序显示textview并自动返回到主列表(项目列表) 如果有人可以帮助我,我将不胜感激。 非常感谢您的支持。
杰夫