首页 > 解决方案 > 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,行为很奇怪:我选择一个项目,应用程序显示文本视图并自动返回主列表(项目列表)如果有人可以帮助我,我将不胜感激. 非常感谢您的支持。

杰夫

标签: xcoderealmswiftuinavigationview

解决方案


推荐阅读