xcode - Swifui Realmdatabase Listview 崩溃
问题描述
晚上好,
我正在用 SwiftUI 实现一个领域数据库。数据库由一个包含“项目”的表和一个包含“测量”的表(关系一对多)组成。主视图显示项目列表,“Measureview”显示与所选项目相关的措施。
当我选择一个项目时,会显示措施列表,然后无法返回,应用程序崩溃(模拟器和真实设备)。Xcode 点 AppDelegate 文件:线程 1:EXC_BAD_ACCESS (code=2, address=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()
}
}
内容视图:
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,行为很奇怪:我选择一个项目,应用程序显示文本视图并自动返回主列表(项目列表)如果有人可以帮助我,我将不胜感激. 非常感谢您的支持。
杰夫
解决方案
推荐阅读
- android - 当我尝试在手机上运行它时,应用程序一直停止(android studio)
- spring - 从 HTML 或 JSON 生成 Angular5 PDF
- c# - C# - AESCng 为什么错误地加密/解密大于 127 的字节数组?
- c# - SQL CLR # 发布问题 MSSQL 2008
- python - theano 和 scikit-neuralnetwork 测试错误
- spring-boot - 无法在集成测试中发布到 Spring Data Rest RepositoryRestResource
- android - Android:无法向下滚动微调器
- image - Flutter/Dart 在实际设备中调整图像大小需要 > 10 分钟
- visual-studio - Xamarin.Forms 在 Visual Studio for Mac 中不起作用
- c# - 如何通过 Startup.cs 中调用的方法将数据保存在 Asp .net core 中?