【问题标题】:swift: MongoDB Realm is not syncing to mobileswift: MongoDB 领域没有同步到移动设备
【发布时间】:2023-03-07 21:32:01
【问题描述】:

打开应用时,我尝试使用此功能将云数据同步到应用

  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”的打印结果,但是当我使用此代码查询时,我开始注意到这一点

 itemrealm = try! Realm(configuration: user.configuration(partitionValue: partitioningValue)

 storeitems = self.itemrealm.objects(Item.self)

查询没有得到我在云集群中的所有内容。

我猜在我将更多数据导入云之前,同步运行良好。我目前在我的集群中有至少 10,000 个数据,这些数据被赋予了被调用的分区值,然后我对 storeitems 进行了 .count 并注意到它只提取了大约 4,000 个项目(这是我导入新数据之前的数量)。所以云没有同步当前数据。

然后我检查了我的仪表板日志并看到了这个

点击权限错误显示此消息

错误类型:同步 -> SyncSession 结束 错误: 以错误结束会话:用户对架构指令的分区没有写入权限 (ProtocolErrorCode=206)

我的同步权限是

 Read : true
 Write : {
   "%%partition": "%%user.id"
  }

用户可以读取所有数据,但只能写入自己的数据

如何修复权限错误并将我的最新集群同步到移动客户端?

当我将写权限切换到

  "%%user.id": "%%partition"

这是我遇到的错误

致命错误:无法打开领域:错误 Domain=io.realm.unknown Code=208 "Bad client file identifier (IDENT)" UserInfo={Category=realm::sync::ProtocolError, NSLocalizedDescription=Bad client file identifier (IDENT),错误代码=208}:

【问题讨论】:

    标签: ios swift mongodb realm


    【解决方案1】:

    您的写入权限是向后的。

    而不是这个(来自问题)

    Read : true
    Write : {
       "%%partition": "%%user.id"
    }
    

    这样做

    Read : true
    Write : {
       "%%user.id": "%%partition"
    }
    

    信息来自 MongoDB 领域同步文档Define Sync Rules

    【讨论】:

    • 写权限由 MongoDB Realm 生成。我尝试了您的建议,但应用程序崩溃并引发错误。问题已更新为错误消息
    • 我用我的 AppRootView 和错误消息更新了问题。
    • @learner101 我更新了我的答案,其中包含一个指向显示权限正确格式的文档的链接(如我的答案所示)。您的崩溃可能是由多种原因造成的,但您需要进行一些故障排除才能确定原因。我建议更新问题,或者甚至提出不同的问题,因为权限错误是一个问题,而崩溃是另一个问题。请确保包含崩溃的代码以及有关它的任何其他详细信息,包括崩溃所在的行。
    • 谢谢杰。这是他们文档中的另一个混淆。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-28
    • 2022-08-14
    • 1970-01-01
    相关资源
    最近更新 更多