微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

swift – Realm对象服务器:声明left.optional == right.optional失败(在Android和iOS之间同步数据)

我正在尝试在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?
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐