加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

swift – Realm对象服务器:声明left.optional == right.optiona

发布时间:2020-12-14 04:42:50 所属栏目:百科 来源:网络整理
导读:我正在尝试在iOS应用程序和 Android应用程序之间同步数据. Android应用程序可以从Realm中读取就好了,但是我的Swift程序正在挣扎,并且错误信息不是很有用. 我收到此错误消息: 2016-11-08 08:53:43.919 iOSRealm[2629:65667] Sync: Connection[1]: Session[1]
我正在尝试在iOS应用程序和 Android应用程序之间同步数据. Android应用程序可以从Realm中读取就好了,但是我的Swift程序正在挣扎,并且错误信息不是很有用.

我收到此错误消息:

2016-11-08 08:53:43.919 iOSRealm[2629:65667] Sync: Connection[1]: Session[1]: Bad changeset received: Assertion failed: left().nullable == right().nullable

我不知道它意味着什么或如何解决它.
这是我使用Realm Object服务器验证自己的方式:

private func synchronouslyLogInUser() throws {
    SyncUser.authenticateWithCredential(Credential.usernamePassword(username,password: password,actions:.UseExistingAccount),authServerURL: authURL) { (user,error) in
        print("sent login request")
        if let user = user {
            print("user was not nil")
            self.setDefaultRealmConfiguration(user)
        }
        if let error = error where error.code == SyncError.HTTPStatusCodeError.rawValue && (error.userInfo["statusCode"] as? Int) == 400 {
            print("invalid user and pass")
        } else {
            print(error)
        }
    }
}

private func setDefaultRealmConfiguration(user: SyncUser) {
    Realm.Configuration.defaultConfiguration = Realm.Configuration(syncConfiguration: (user,realmURL),objectTypes: [Weather.self,Wind.self])
    Realm.Configuration.defaultConfiguration.deleteRealmIfMigrationNeeded = true
    realm = try! Realm()
}

我看到输出被打印到控制台,所以我知道登录尝试是成功的.我不认为这是一个不匹配的数据库的问题,因为我将deleteRealmIfMigrationNeeded标志设置为true.

此错误消息的含义是什么?如何解决?

可以在此处找到相应的Object Realm Server日志:http://pastebin.com/raw/J9mU4H0u – 我对异地链接表示歉意,但这是一个很长的日志文件.

我的Swift模型如下:

class Weather : Object {
    dynamic var id = 0
    dynamic var date = ""
    dynamic var forecast = ""
    dynamic var humidity = ""
    dynamic var wind: Wind!

    override class func primaryKey() -> String? {
        return "id"
    }
}

class Wind: Object {
    dynamic var direction = ""
    dynamic var speed = ""
}

Android机型:

public class Weather extends RealmObject {
    @PrimaryKey
    public int id;
    public String date;
    public String forecast;
    public String humidity;
    public Wind wind;
}

public class Wind extends RealmObject {
    public String direction;
    public String speed;
}

提前致谢!

解决方法

弄清楚发生了什么.显然,根据定义,Java String可以为空(或者如果你愿意,可以是可选的).在Swift中,我告诉我的模型映射到非可选字符串.这就是为什么错误消息说它无法断言left.optional == right.optional.

所以,我必须做的就是让我的swift模型中的每个String都可选.

看这里:

class Weather : Object {
    dynamic var id = 0
    dynamic var date: String?
    dynamic var forecast: String?
    dynamic var humidity: String?
    dynamic var wind: Wind?

    override class func primaryKey() -> String? {
        return "id"
    }
}

class Wind: Object {
    dynamic var direction: String?
    dynamic var speed: String?
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读