Swift:查询时,MongoDB Realm不同步

问题描述

当我快速查询领域时,我没有在MongoDB集群中获得最新数据。我最初在该领域中拥有大约4000个数据,并且已同步到移动设备,但是当我将数据增加到大约10,000个时,它不会同步最新的数据。应用启动时,我注意到此打印内容

同步:连接[1]:会话[1]:client_reset_config = false,存在的域= true,异步打开= false,客户端重置= false。

这是我尝试在启动时进行同步的方式

struct AppRootView: View {
@State var homeLink = false // <- add here
@State var loginLink = false
@State private var selection: String? = nil


var body: some View {
  NavigationView { // <- wrap in the `NavigationView`
    vstack(alignment: .leading) {
        Text("App")
            .bold()
            .font(.largeTitle)
        
        NavigationLink(destination: homeMainView(),tag: "home",selection: $selection) {EmptyView()}
        NavigationLink(destination: LoginView(),tag: "login",selection: $selection) {EmptyView()}
    }

 }
.onAppear(perform: handleSignIn)
.frame(minWidth: 0,maxWidth: .infinity,minHeight: 0,maxHeight: .infinity).background(Color.yellow)
}

func handleSignIn() {
  print("HANDLING SIGNING IN")
  if let _ = app.currentUser() {
    print("USER IS LOGGED IN ALREADY")
    self.handleRealmSync()

    self.selection = "home" // <- activate the `NavigationLink`
} else {
    print("USER NEEDS TO LOGIN")
    self.selection = "login"
    print("not logged in; present sign in/signup view")
 }
 }

 func handleRealmSync(){
 let user = app.currentUser()
 let partitionValue = "store=walmart"

 Realm.asyncopen(configuration: user!.configuration(partitionValue: partitionValue),callback: { (maybeRealm,error) in
        guard error == nil else {
            fatalError("Failed to open realm: \(error!)")
        }
        guard let realm = maybeRealm else {
            fatalError("realm is nil!")
        }
        // realm opened
        print("Realm SYNC IS OPENED")
     })
  }
 }

我得到了打印的“ Realm SYNC IS OPENED”,这让我认为应该是这样

领域存在= true,异步打开= false

似乎有冲突。然后我检查了MongoDB Realm登录同步会话。这是消息

[“会话在收到UNBIND事件后关闭”]

它表明同步未发生。是什么会阻止同步?任何帮助将不胜感激。

解决方法

您可能只需要确保 Realm 没有被取消初始化。

您可以创建一个 @State 属性来存储在回调中收到的 Realm 实例:

@State var realm:Realm?

 Realm.asyncOpen(configuration: user!.configuration(partitionValue: partitionValue)) { (maybeRealm,error) in
        guard error == nil else {
            fatalError("Failed to open realm: \(error!)")
        }
        guard let realm = maybeRealm else {
            fatalError("realm is nil!")
        }
        // realm opened
        print("Realm SYNC IS OPENED")
        self.realm = maybeRealm
     }
  }