Swift can';t使用mongodb sync打开领域

Swift can';t使用mongodb sync打开领域,swift,mongodb,realm,Swift,Mongodb,Realm,我无法打开一个领域。我的设置有问题。这是应用程序中的代码: var configuration = user.configuration(partitionValue: "user=\(user.id)") configuration.objectTypes = [User.self] Realm.asyncOpen(configuration: configuration) { [weak self](userRealm, error) in

我无法打开一个领域。我的设置有问题。这是应用程序中的代码:

var configuration = user.configuration(partitionValue: "user=\(user.id)")
configuration.objectTypes = [User.self]
Realm.asyncOpen(configuration: configuration) { [weak self](userRealm, error) in
                self!.setLoading(false);
                guard error == nil else {
                    fatalError("Failed to open realm: \(error!)").   ///// here was my error before the edit (I changed the Permission Settings in Sync)
                }
错误代码:“致命错误:无法打开域:错误域=io.realm.unknown code=89”操作已取消“UserInfo={Category=realm.basic_system,NSLocalizedDescription=操作已取消,错误代码=89”

Mongodb同步配置屏幕截图

编辑: 将权限设置与Task Tracker应用程序中提到的并使其连接的权限设置同步替换:

编辑:根据Jay的建议,将配置设置更改为以下内容

var configuration = user.configuration(partitionValue: "\(currentUser.id!)")
以下是我对用户集合的方案定义:

{
"properties": {
"_id": {
  "bsonType": "string"
},
"_partition": {
  "bsonType": "string"
},
"name": {
  "bsonType": "string"
}
},
"required": [
   "_id",
   "_partition",
   "name"
],
"title": "User"
}
这是我在Xcode中的用户类:

class User: Object {
@objc dynamic var _id: String = ""
@objc dynamic var _partition: String = ""
@objc dynamic var name: String = ""
override static func primaryKey() -> String? {
    return "_id"
}
}
编辑:我将通过更新同步权限来建立连接,因此应用程序不再崩溃。但是,现在我收到以下消息:

Connection to daemon was invalidated
Signup successful!
Log in as user: y
Login succeeded!
2020-10-25...Sync: Connection[1]: Session[1]: client_reset_config = false, Realm exists = false, async open = false, client reset = falseSync: Connection[1]: Session[1]: client_reset_config = false, Realm exists = false, async open = false, client reset = false
2020-10-25...Sync: Connection[1]: Connected to endpoint '13.54.209.90:443' (from '.....:52139')
2020-10-25...Sync: Connection[1]: Reading failed: End of input
2020-10-25...Sync: Connection[1]: Connection closed due to error```
我不明白上面代码中的错误“(“未能打开领域:(错误!)”)没有被触发,但是在日志中它说领域不存在!那么,这里发生了什么

编辑:这是mongodb中的用户表,所以我成功创建了一些用户

编辑:这是来自mongodb的日志

正如我们可以看到的,用户Id和请求Id是不一样的!我想这两个Id应该是相同的字符串,以便进行身份验证,对吗


我正在遵循mongodb网页上的任务跟踪器应用程序教程,以便Swift将用户登录添加到我的应用程序。我在这里遗漏了什么?

作为一个完整的猜测,您的配置字符串不正确

var configuration = user.configuration(partitionValue: "user=\(user.id)")
分区值解析为

partitionValue: user=Optional("5f1b586f757611faec257d88")
试试这个

guard let user = your_app.currentUser() else {
    print("no user")
    return
}

guard let userId = user.id else {
    print("no user")
    return
}

var configuration = user.configuration(partitionValue: "user=\(userId)")
更重要的是,您尝试使用的分区值是这个字符串

user=5f1b586f757611faec257d88
我认为你真正想要的是使用用户id

5f1b586f757611faec257d88

这就是我要开始的地方。如果你试图利用领域规则,那么像
\u partitionKey:“team\u id=1234”
这样的东西会起作用,但这超出了原始问题的范围(并增加了另一层复杂性-首先让它起作用,然后探索规则).

完全可以猜测,您的配置字符串不正确

var configuration = user.configuration(partitionValue: "user=\(user.id)")
分区值解析为

partitionValue: user=Optional("5f1b586f757611faec257d88")
试试这个

guard let user = your_app.currentUser() else {
    print("no user")
    return
}

guard let userId = user.id else {
    print("no user")
    return
}

var configuration = user.configuration(partitionValue: "user=\(userId)")
更重要的是,您尝试使用的分区值是这个字符串

user=5f1b586f757611faec257d88
我认为你真正想要的是使用用户id

5f1b586f757611faec257d88

这就是我要开始的地方。如果你试图利用领域规则,那么像
\u partitionKey:“team\u id=1234”
这样的东西会起作用,但这超出了原始问题的范围(并增加了另一层复杂性-首先让它起作用,然后探索规则)

领域AsiCnOnter显然不起作用,但为什么我添加了一个答案,但我认为你正在处理两个问题1)连接到领域,然后2)使用来自你的用户对象的自定义配置数据。而且,你看起来在使用一个先前版本的领域,所以你应该做一个<代码> POD更新< /Cord>注意所有领域功能关闭ameters从
xxxx,error
,更改为一个Result对象,因此请准备好更新您的代码。我从mongodb添加了更新的日志,它显示用户Id和请求Id不相同!我猜为了进行身份验证,这两个Id应该是相同的字符串,对吗?您能解释一下上面错误日志中的含义吗“同步:连接[1]:读取失败:输入结束”。读取失败的原因是什么?错误:无法评估同步权限,错误为:无法与未定义的(ProtocolErrorCode=206)进行比较。为什么会显示“与未定义的进行比较”"?我在日志中有两个用户id字符串!!Realm asyncopen显然不起作用,但为什么?我添加了一个答案,但我认为您正在处理两个问题:1)连接到Realm,然后2)使用来自用户对象的自定义配置数据。此外,您似乎正在使用早期版本的Realm,因此您应该执行
pod更新
noting所有领域函数闭包参数从
xxxx,error
,更改为结果对象,因此请准备更新您的代码。我从mongodb添加了更新的日志,它显示用户Id和请求Id不相同!我猜两个Id应该是相同的字符串,以便进行身份验证,对吗?您能解释一下吗“同步:连接[1]:读取失败:输入结束”上面的错误日志中的含义。读取失败的原因是什么?错误:无法评估同步权限,错误:无法与未定义的进行比较(ProtocolErrorCode=206)。为什么它会说“与未定义的进行比较”?我在日志中有两个用户id字符串!!将其添加到代码中,配置似乎是fine@kangarooChris我认为问题是一样的-你告诉realm分区值是这个
user=5f1b586f757611faec257d88
,我很确定你想要这个
5f1b586f757611faec257d88
(不包括字符串
user=
)将此添加到代码中,配置似乎是fine@kangarooChris我认为问题是一样的-你告诉realm分区值是这个
user=5f1b586f757611faec257d88
,我很确定你想要这个
5f1b586f757611faec257d88
(不包括字符串
user=